Russian Qt Forum
Ноябрь 23, 2024, 00:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Lua + QT  (Прочитано 22467 раз)
edg3
Гость
« : Апрель 15, 2011, 19:45 »

Добрый день. Хотел бы узнать, как подключить к QT интерпритатор Lua.
зі. если кому интересно, стоит задача построить график по заданной формуле. Для построения графика использую Qwt, а чтобы не писать парсер, решил просто вызывать функцию Lua, где будет записана форуме по которой считать.
Записан
BRE
Гость
« Ответ #1 : Апрель 15, 2011, 20:37 »

Подключить lua можно также, как и любую другую библиотеку (почитай про qmake и команды pro-файлы).
Кстати в Qt есть свой скриптовый язык (почитай про QtScript)
Записан
AleUri
Гость
« Ответ #2 : Апрель 16, 2011, 07:32 »

в качестве парсера можно использовать http://muparser.sourceforge.net/
Записан
edg3
Гость
« Ответ #3 : Апрель 19, 2011, 20:33 »

а, ктто уже пробовал вызывать функцию с Lua в QT? у меня никак не получаеться, может там особенный синтаксис?

luaL_openlibs(locLua);

 luaL_dofile(locLua, "function.lua");

 lua_getglobal(locLua, "function");

 lua_pushnumber(locLua, x);
lua_call(locLua, 1, 1);
 double res = lua_tonumber(locLua, -1);

 lua_close( locLua );

вот таким способом не получаеться(
Записан
brankovic
Гость
« Ответ #4 : Апрель 20, 2011, 00:20 »

lua_getglobal(locLua, "function");

так надо делать не от "function" а от имени глобальное переменной где функция лежит. function там ключевое слово. И там ещё есть lua_pcall, который возвращает ошибку читабельную, лучше его использовать, а не lua_call.
Записан
edg3
Гость
« Ответ #5 : Апрель 20, 2011, 09:41 »

пробовал lua_getglobal(locLua, "myfunc");
не помогло(
Записан
edg3
Гость
« Ответ #6 : Апрель 20, 2011, 23:37 »

Код
C++ (Qt)
#include <QtGui>
#include "QwtBeginner.h"
#include <QMenu.h>
#include "lua.h"
#include "luaconf.h"
#include "lualib.h"
#include "lauxlib.h"
int main(int argc, char *argv[])
{
 
   QApplication app(argc, argv);
   QwtBeginner *wnd = new QwtBeginner;
   int k=10;
   lua_State *L=lua_open();
   luaL_openlibs(L);
   luaL_dofile(L,"function.lua");
   lua_getglobal(L,"myfunc");
   lua_pushnumber(L,k);
   lua_call(L,1,1);
   double res=lua_tonumber(L,-1);
   lua_close(L);
   QMenuBar pmen(wnd);
   QMenu menu("&Application");
   menu.addAction("&close",&app,SLOT(quit()));
   pmen.addMenu(&menu);
   pmen.setVisible(true);
   wnd->show();
   return app.exec();
 
}
 

выдает ошибку:
Код:
release/main.o:main.cpp:(.text+0x4a): undefined reference to `luaL_newstate()'

release/main.o:main.cpp:(.text+0x54): undefined reference to `luaL_openlibs(lua_State*)'

release/main.o:main.cpp:(.text+0x64): undefined reference to `luaL_loadfile(lua_State*, char const*)'

release/main.o:main.cpp:(.text+0x88): undefined reference to `lua_pcall(lua_State*, int, int, int)'

release/main.o:main.cpp:(.text+0xa0): undefined reference to `lua_getfield(lua_State*, int, char const*)'

release/main.o:main.cpp:(.text+0xb8): undefined reference to `lua_pushnumber(lua_State*, double)'

release/main.o:main.cpp:(.text+0xd0): undefined reference to `lua_call(lua_State*, int, int)'

release/main.o:main.cpp:(.text+0xe0): undefined reference to `lua_tonumber(lua_State*, int)'

release/main.o:main.cpp:(.text+0xea): undefined reference to `lua_close(lua_State*)'

collect2: ld returned 1 exit status

mingw32-make[1]: *** [release\untitled.exe] Error 1

mingw32-make: *** [release] Error 2
« Последнее редактирование: Апрель 21, 2011, 07:28 от Пантер » Записан
brankovic
Гость
« Ответ #7 : Апрель 21, 2011, 01:01 »

выдает ошибку:

release/main.o:main.cpp:(.text+0x4a): undefined reference to `luaL_newstate()'
...
collect2: ld returned 1 exit status
mingw32-make[1]: *** [release\untitled.exe] Error 1
mingw32-make: *** [release] Error 2


просто библиотека не нашлась, библиотеку надо добавить в командную строку, например:

g++ main.cpp -llua5.1

а ещё лучше так:

g++ main.cpp -L"C:\путь\до\библиотеки\луа" -llua5.1
Записан
edg3
Гость
« Ответ #8 : Апрель 21, 2011, 01:10 »

а где это в QT Creator прописывать?
Записан
brankovic
Гость
« Ответ #9 : Апрель 21, 2011, 09:00 »

а где это в QT Creator прописывать?

где-то в qmake (Edit: в смысле в .pro-файле, который креатор создал для проекта) прописать надо, типа такого:

LIBS += -L/path/to/lua -llua5.1

на винде путь только будет с C:\ наверное, попробуйте разное
« Последнее редактирование: Апрель 21, 2011, 09:04 от brankovic » Записан
edg3
Гость
« Ответ #10 : Апрель 21, 2011, 22:52 »

а какой из этих файлов указывать в LIBS +=C:\luatest\src\
lua51.dll
lua51.lib ?
Записан
brankovic
Гость
« Ответ #11 : Апрель 21, 2011, 23:41 »

а какой из этих файлов указывать в LIBS +=C:\luatest\src\
lua51.dll
lua51.lib ?

если lua51.dll лежит в C:\lua\libs, то указывать надо:

LIBS += -L"C:\lua\libs" -llua51

, без расширений. C:\lua\libs это место, где лежит lua51.dll
Записан
edg3
Гость
« Ответ #12 : Апрель 22, 2011, 00:10 »

все прописал, но опять же. все те же ошибки(
Записан
brankovic
Гость
« Ответ #13 : Апрель 22, 2011, 00:24 »

все прописал, но опять же. все те же ошибки(

C:\mingw\bin\g++.exe main.cpp -L"C:\lua\libs" -llua5.1

из консоли минимальный пример, без Qt, компилится так?
Записан
edg3
Гость
« Ответ #14 : Апрель 23, 2011, 09:47 »

перенес заголовочные файлы к g++.exe в каталог, те же ошибки. может я не правильно скомпилировал lua? компилировал через visual studio 2008, там специальный бат файл для нее
« Последнее редактирование: Апрель 23, 2011, 09:58 от edg3 » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.09 секунд. Запросов: 20.