Qt与Lua | 放置lua文件的位置

我已经创建了一个带有实现对lua的调用的主方法的cpp文件。 当编译和执行qt项目时,我收到以下错误消息:

PANIC:在调用Lua API时发生未受保护的错误(尝试调用字符串值)

问题是lua找不到要执行的lua文件(至少我认为如此)。因此,我将该文件复制到所有的调试目录和主目录,但仍然无法解决问题。

感谢您的帮助!


main.cpp

#include <stdio.h>

extern "C" {
    #include "lua.h"
    #include "lualib.h"
    #include "lauxlib.h"
}

lua_State* L;

int main(int argc, char *argv[])
{

    /* 初始化Lua */
    L = luaL_newstate();

    /* 加载Lua基础库 */
    luaL_openlibs(L);

    /* 加载脚本 */
    luaL_loadfile(L, "test.lua");

    lua_call(L, 0, 0);

    /* 清理Lua */
    lua_close(L);

}

以及文件test.lua

-- 测试

print("Hello World")
点赞
用户5843716
用户5843716

这与 Qt 并没有太大关系,因为在您的软件中并没有使用任何 Qt API。

您应该检查 lual_loadfile 方法返回的状态,就像这个示例所示。这应该会提供一些关于出现问题的更多线索。

以防万一,这里有一个QtLua 模块可能会感兴趣。

2017-01-15 23:10:03
用户4036474
用户4036474

由于这是一个运行时文件操作,这个函数可能只会在当前目录中查找。

2017-01-15 23:48:12
用户2891409
用户2891409

似乎 Qt 默认使用用户目录作为路径。

您可以使用以下方法进行验证:(感谢 Rich

QDir dir(".");
qDebug() << dir.absolutePath();

将 lua 脚本放入此文件夹中,一切都可以正常工作。

可以使用以下命令设置工作目录:

QDir::setCurrent()

并结合使用

QCoreApplication::applicationFilePath()

路径可以设置为 exe 所在的位置。

2017-01-16 20:29:58