Название: Lua + QT
Отправлено: edg3 от Апрель 15, 2011, 19:45
Добрый день. Хотел бы узнать, как подключить к QT интерпритатор Lua. зі. если кому интересно, стоит задача построить график по заданной формуле. Для построения графика использую Qwt, а чтобы не писать парсер, решил просто вызывать функцию Lua, где будет записана форуме по которой считать.
Название: Re: Lua + QT
Отправлено: BRE от Апрель 15, 2011, 20:37
Подключить lua можно также, как и любую другую библиотеку (почитай про qmake и команды pro-файлы). Кстати в Qt есть свой скриптовый язык (почитай про QtScript)
Название: Re: Lua + QT
Отправлено: AleUri от Апрель 16, 2011, 07:32
в качестве парсера можно использовать http://muparser.sourceforge.net/
Название: Re: Lua + QT
Отправлено: edg3 от Апрель 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 );
вот таким способом не получаеться(
Название: Re: Lua + QT
Отправлено: brankovic от Апрель 20, 2011, 00:20
lua_getglobal(locLua, "function");
так надо делать не от "function" а от имени глобальное переменной где функция лежит. function там ключевое слово. И там ещё есть lua_pcall, который возвращает ошибку читабельную, лучше его использовать, а не lua_call.
Название: Re: Lua + QT
Отправлено: edg3 от Апрель 20, 2011, 09:41
пробовал lua_getglobal(locLua, "myfunc"); не помогло(
Название: Re: Lua + QT
Отправлено: edg3 от Апрель 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
Название: Re: Lua + QT
Отправлено: brankovic от Апрель 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
Название: Re: Lua + QT
Отправлено: edg3 от Апрель 21, 2011, 01:10
а где это в QT Creator прописывать?
Название: Re: Lua + QT
Отправлено: brankovic от Апрель 21, 2011, 09:00
а где это в QT Creator прописывать?
где-то в qmake (Edit: в смысле в .pro-файле, который креатор создал для проекта) прописать надо, типа такого: LIBS += -L/path/to/lua -llua5.1 на винде путь только будет с C:\ наверное, попробуйте разное
Название: Re: Lua + QT
Отправлено: edg3 от Апрель 21, 2011, 22:52
а какой из этих файлов указывать в LIBS +=C:\luatest\src\ lua51.dll lua51.lib ?
Название: Re: Lua + QT
Отправлено: brankovic от Апрель 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
Название: Re: Lua + QT
Отправлено: edg3 от Апрель 22, 2011, 00:10
все прописал, но опять же. все те же ошибки(
Название: Re: Lua + QT
Отправлено: brankovic от Апрель 22, 2011, 00:24
все прописал, но опять же. все те же ошибки(
C:\mingw\bin\g++.exe main.cpp -L"C:\lua\libs" -llua5.1 из консоли минимальный пример, без Qt, компилится так?
Название: Re: Lua + QT
Отправлено: edg3 от Апрель 23, 2011, 09:47
перенес заголовочные файлы к g++.exe в каталог, те же ошибки. может я не правильно скомпилировал lua? компилировал через visual studio 2008, там специальный бат файл для нее
Название: Re: Lua + QT
Отправлено: brankovic от Апрель 23, 2011, 11:12
перенес заголовочные файлы к g++.exe в каталог, те же ошибки. может я не правильно скомпилировал lua? компилировал через visual studio 2008, там специальный бат файл для нее
Что-то застряло дело совсем. Если компилировать из командной строки через g++ и указать статическую библиотеку напрямую, то работает? так: g++.exe my.cpp "C:\path\to\lua\liblua51.a" Если это не работает, то библиотека плохо скомпилировалась.
Название: Re: Lua + QT
Отправлено: edg3 от Апрель 24, 2011, 14:45
у меня после компиляции lua51.a не появилось, токлько lua51.dll и lua51.lib
Название: Re: Lua + QT
Отправлено: Fat-Zer от Апрель 24, 2011, 20:10
edg3 опечатался... в винде статические библиотеки имеют расширение *.lib
Название: Re: Lua + QT
Отправлено: edg3 от Апрель 25, 2011, 01:35
собралось нормально. без ошибок. так всетаки как же мне настроить qt?
Название: Re: Lua + QT
Отправлено: Fat-Zer от Апрель 25, 2011, 01:59
скиньте команды, которые в логи при компиляции светятся
Название: Re: Lua + QT
Отправлено: edg3 от Апрель 26, 2011, 09:38
Выполняется сборка проекта untitled... Настройки не изменились, этап qmake пропускается. Запускается "D:/Tutorial/Progs/Qt/2010.05/mingw/bin/mingw32-make.exe" -w mingw32-make: Entering directory `D:/Tutorial/Progs/Qt/2010.05/untitled-build-desktop'
D:/Tutorial/Progs/Qt/2010.05/mingw/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `D:/Tutorial/Progs/Qt/2010.05/untitled-build-desktop'
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows -o debug\untitled.exe debug/main.o debug/QwtBeginner.o debug/dialog_window.o debug/moc_QwtBeginner.o debug/moc_dialog_window.o -L"d:\Tutorial\Progs\Qt\2010.05\qt\lib" -lmingw32 -lqtmaind D:\Tutorial\Progs\tempius\qwt-5.2.1\qwt-5.2.1\lib\libqwt5.a D:\Tutorial\Progs\lua\lua51.dll "-LC:\lluaa\src -llua51" -lQtGuid4 -lQtCored4
debug/main.o: In function `Z5qMainiPPc':
D:\Tutorial\Progs\Qt\2010.05\untitled-build-desktop/../../../QT/2010.05/untitled/main.cpp:14: undefined reference to `luaL_newstate()'
D:\Tutorial\Progs\Qt\2010.05\untitled-build-desktop/../../../QT/2010.05/untitled/main.cpp:15: undefined reference to `luaL_openlibs(lua_State*)'
mingw32-make[1]: Leaving directory `D:/Tutorial/Progs/Qt/2010.05/untitled-build-desktop'
mingw32-make: Leaving directory `D:/Tutorial/Progs/Qt/2010.05/untitled-build-desktop'
D:\Tutorial\Progs\Qt\2010.05\untitled-build-desktop/../../../QT/2010.05/untitled/main.cpp:16: undefined reference to `luaL_loadfile(lua_State*, char const*)'
D:\Tutorial\Progs\Qt\2010.05\untitled-build-desktop/../../../QT/2010.05/untitled/main.cpp:16: undefined reference to `lua_pcall(lua_State*, int, int, int)'
D:\Tutorial\Progs\Qt\2010.05\untitled-build-desktop/../../../QT/2010.05/untitled/main.cpp:17: undefined reference to `lua_getfield(lua_State*, int, char const*)'
D:\Tutorial\Progs\Qt\2010.05\untitled-build-desktop/../../../QT/2010.05/untitled/main.cpp:18: undefined reference to `lua_pushnumber(lua_State*, double)'
D:\Tutorial\Progs\Qt\2010.05\untitled-build-desktop/../../../QT/2010.05/untitled/main.cpp:19: undefined reference to `lua_call(lua_State*, int, int)'
D:\Tutorial\Progs\Qt\2010.05\untitled-build-desktop/../../../QT/2010.05/untitled/main.cpp:20: undefined reference to `lua_tonumber(lua_State*, int)'
D:\Tutorial\Progs\Qt\2010.05\untitled-build-desktop/../../../QT/2010.05/untitled/main.cpp:21: undefined reference to `lua_close(lua_State*)'
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\untitled.exe] Error 1
mingw32-make: *** [debug] Error 2
Процесс "D:/Tutorial/Progs/Qt/2010.05/mingw/bin/mingw32-make.exe" завершился с кодом %2. Возникла ошибка при сборке проекта untitled (цель: Настольный компьютер) Во время выполнения сборки на этапе "Сборка"
Название: Re: Lua + QT
Отправлено: Fat-Zer от Апрель 26, 2011, 11:52
ошибка в том, что это "-LC:\lluaa\src -llua51" заключено в кавычки... в *.pro файле что находится?
Название: Re: Lua + QT
Отправлено: edg3 от Апрель 26, 2011, 23:44
в про файле QT += core gui
TARGET = untitled TEMPLATE = app
INCLUDEPATH += D:\Tutorial\Progs\tempius\qwt-5.2.1\qwt-5.2.1\src LIBS += D:\Tutorial\Progs\tempius\qwt-5.2.1\qwt-5.2.1\lib\libqwt5.a INCLUDEPATH +=C:\lluaa\src LIBS +=-L"C:\lluaa\src\" -llua51 SOURCES += main.cpp \ QwtBeginner.cpp \ dialog_window.cpp
HEADERS += \ QwtBeginner.h \ dialog_window.h
FORMS +=
Название: Re: Lua + QT
Отправлено: Fat-Zer от Апрель 27, 2011, 01:21
LIBS +=-L"C:\lluaa\src\" -llua51 а документацию почитать не пробовали? LIBS += $$quote(C:\lluaa\src\lua51.lib) для статической LIBS += $$quote(-LC:\lluaa\src) -llua51 для динамеческой ЗЫ: насчёт второго не уверен, но первое помочь должно... ещё второе можно написать в две строки... Да и quote по большому счёту не обязателен...
Название: Re: Lua + QT
Отправлено: edg3 от Апрель 27, 2011, 10:08
QT += core gui
TARGET = untitled TEMPLATE = app
INCLUDEPATH += D:\Tutorial\Progs\tempius\qwt-5.2.1\qwt-5.2.1\src LIBS += D:\Tutorial\Progs\tempius\qwt-5.2.1\qwt-5.2.1\lib\libqwt5.a INCLUDEPATH +=C:\lluaa\src LIBS += $$quote(C:\lluaa\src\lua51.lib) SOURCES += main.cpp \ widget.cpp \
HEADERS += widget.h \
FORMS +=
и опять: Выполняется сборка проекта test2... Настройки не изменились, этап qmake пропускается. Запускается "D:/Tutorial/Progs/Qt/2010.05/mingw/bin/mingw32-make.exe" -w mingw32-make: Entering directory `D:/Tutorial/Progs/Qt/2010.05/test2-build-desktop'
d:\tutorial\progs\qt\2010.05\qt\bin\qmake.exe -spec ..\qt\mkspecs\win32-g++ -o Makefile ..\test2\test2.pro
mingw32-make: Leaving directory `D:/Tutorial/Progs/Qt/2010.05/test2-build-desktop'
WARNING: d:\Tutorial\Progs\Qt\2010.05\test2\test2.pro:12: Unescaped backslashes are deprecated.
WARNING: d:\Tutorial\Progs\Qt\2010.05\test2\test2.pro:12: Unescaped backslashes are deprecated.
WARNING: d:\Tutorial\Progs\Qt\2010.05\test2\test2.pro:12: Unescaped backslashes are deprecated.
mingw32-make: Entering directory `D:/Tutorial/Progs/Qt/2010.05/test2-build-desktop'
D:/Tutorial/Progs/Qt/2010.05/mingw/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `D:/Tutorial/Progs/Qt/2010.05/test2-build-desktop'
D:\Tutorial\Progs\Qt\2010.05\qt\bin\moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\qt\include\QtCore" -I"..\qt\include\QtGui" -I"..\qt\include" -I"..\..\..\tempius\qwt-5.2.1\qwt-5.2.1\src" -I"c:\lluaa\src" -I"..\qt\include\ActiveQt" -I"debug" -I"..\test2" -I"." -I"..\qt\mkspecs\win32-g++" -D__GNUC__ -DWIN32 ..\test2\widget.h -o debug\moc_widget.cpp
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\qt\include\QtCore" -I"..\qt\include\QtGui" -I"..\qt\include" -I"..\..\..\tempius\qwt-5.2.1\qwt-5.2.1\src" -I"c:\lluaa\src" -I"..\qt\include\ActiveQt" -I"debug" -I"..\test2" -I"." -I"..\qt\mkspecs\win32-g++" -o debug\moc_widget.o debug\moc_widget.cpp
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows -o debug\untitled.exe debug/main.o debug/widget.o debug/moc_widget.o -L"d:\Tutorial\Progs\Qt\2010.05\qt\lib" -lmingw32 -lqtmaind D:\Tutorial\Progs\tempius\qwt-5.2.1\qwt-5.2.1\lib\libqwt5.a C:\lluaa\src\lua51.lib -lQtGuid4 -lQtCored4
mingw32-make[1]: Leaving directory `D:/Tutorial/Progs/Qt/2010.05/test2-build-desktop'
mingw32-make: Leaving directory `D:/Tutorial/Progs/Qt/2010.05/test2-build-desktop'
debug/main.o: In function `Z5qMainiPPc':
D:\Tutorial\Progs\Qt\2010.05\test2-build-desktop/../test2/main.cpp:14: undefined reference to `luaL_newstate()'
D:\Tutorial\Progs\Qt\2010.05\test2-build-desktop/../test2/main.cpp:15: undefined reference to `luaL_openlibs(lua_State*)'
D:\Tutorial\Progs\Qt\2010.05\test2-build-desktop/../test2/main.cpp:16: undefined reference to `luaL_loadfile(lua_State*, char const*)'
D:\Tutorial\Progs\Qt\2010.05\test2-build-desktop/../test2/main.cpp:16: undefined reference to `lua_pcall(lua_State*, int, int, int)'
D:\Tutorial\Progs\Qt\2010.05\test2-build-desktop/../test2/main.cpp:17: undefined reference to `lua_getfield(lua_State*, int, char const*)'
D:\Tutorial\Progs\Qt\2010.05\test2-build-desktop/../test2/main.cpp:18: undefined reference to `lua_pushnumber(lua_State*, double)'
D:\Tutorial\Progs\Qt\2010.05\test2-build-desktop/../test2/main.cpp:19: undefined reference to `lua_call(lua_State*, int, int)'
D:\Tutorial\Progs\Qt\2010.05\test2-build-desktop/../test2/main.cpp:20: undefined reference to `lua_tonumber(lua_State*, int)'
D:\Tutorial\Progs\Qt\2010.05\test2-build-desktop/../test2/main.cpp:21: undefined reference to `lua_close(lua_State*)'
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\untitled.exe] Error 1
mingw32-make: *** [debug] Error 2
Процесс "D:/Tutorial/Progs/Qt/2010.05/mingw/bin/mingw32-make.exe" завершился с кодом %2. Возникла ошибка при сборке проекта test2 (цель: Настольный компьютер) Во время выполнения сборки на этапе "Сборка" причем, если нажать на функции "найти использование" то найдет.
Название: Re: Lua + QT
Отправлено: Fat-Zer от Апрель 27, 2011, 14:14
а если последнюю команду из консоли выполнить?
Название: Re: Lua + QT
Отправлено: edg3 от Апрель 28, 2011, 00:44
а если последнюю команду из консоли выполнить?
если с консоли скомпилить, ну ввести mingw32-make release все равно не видит оно функций lua ((
Название: Re: Lua + QT
Отправлено: Fat-Zer от Апрель 28, 2011, 01:11
если с консоли скомпилить, ну ввести mingw32-make release все равно не видит оно функций lua ((
нет, я про g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows -o debug\untitled.exe debug/main.o debug/widget.o debug/moc_widget.o -L"d:\Tutorial\Progs\Qt\2010.05\qt\lib" -lmingw32 -lqtmaind D:\Tutorial\Progs\tempius\qwt-5.2.1\qwt-5.2.1\lib\libqwt5.a C:\lluaa\src\lua51.lib -lQtGuid4 -lQtCored4
в ней вроде всё правильно прописано...
Название: Re: Lua + QT
Отправлено: edg3 от Апрель 28, 2011, 01:20
ну, попробовал, все равно не пашет.(
Название: Re: Lua + QT
Отправлено: m_ax от Апрель 28, 2011, 01:36
Да просто пропишите в .pro файле
INCLUDEPATH += c:/lluaa/include - путь к хедерам LIBPATH = c:/lluaa/lib - путь к либам LIBS +=-L$$LIBPATH -llua51
соблюдая синтаксис приведённый выше.
|