Qt编译lua库并调用

参考博客:

编译lua库

参考下面文章编译lua库文件
QT5.9学习笔记之QT编译lua库_qtluaintf.h-CSDN博客
https://blog.csdn.net/qq_23345187/article/details/112710677

Qt代码引用lua库文件

打开pro项目文件,右键空白处,点击添加库:

选择外部库:

如下选择静态库文件

代码调用

头文件只需要包含lua.hpp

#include "lua.hpp"

下面是封装好的一个参数:

cpp 复制代码
QString CScriptDialog::procLuaFunc(const QString &luaStr, const QString &val)
{
    lua_State *L;
    qDebug()<< "*********luaStr: ", luaStr;

//    luaStr = removeChar(luaStr, '\\');

   // 初始化Lua
   L = luaL_newstate();//新建lua虚拟机
   if (L == NULL)
   {
       qDebug()<< "lua_open fault luaStr: ", luaStr;
       return val;
   }

   // 加载Lua标准库
   luaL_openlibs(L);

   // 将Lua代码段转换为字符串,并传递给Lua执行
   if (luaL_dostring(L, luaStr.toStdString().c_str())  != 0 ) {
       lua_close(L);
       qDebug("luaL_dostring fault: %s ", luaStr.toStdString().c_str());
       return val;
   }
   // 获取函数名称
   const char *func_name = "getValue";

   lua_getglobal(L, func_name);


   // 将参数压入Lua栈中
   lua_pushstring(L, val.toStdString().c_str());


   // 调用Lua中的函数
   if (lua_pcall(L, 1, 1, 0) != 0) {  // 第二个参数是传递给Lua的参数个数,第三个是从Lua返回的值个数
       qDebug("lua_pcall fault: %s %s ", luaStr.toStdString().c_str(),lua_tostring(L, -1));
       lua_close(L);
       return val;
   }

   // 从Lua中获取返回值
   if (!lua_isstring(L, -1)) {
       qDebug("Function {} did not return a string.", func_name);
       lua_close(L);
       return val;
   }

   QString retVal = lua_tostring(L, -1);

   // 打印返回值
   qDebug()<<"*********Result: "<<retVal;

   // 关闭Lua状态机
   lua_close(L);

   return retVal;
}

#### 运行测试
相关推荐
用户805533698034 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner4 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz9 天前
QML Hello World 入门示例
qt
xcyxiner12 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner13 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner13 天前
DicomViewer (添加模型类)3
qt
xcyxiner14 天前
DicomViewer (目录调整) 2
qt
xcyxiner14 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
许彰午16 天前
39_Java单元测试JUnit入门
java·junit·单元测试
xingpanvip16 天前
星盘接口开发文档:本命盘接口指南
android·开发语言·css·php·lua