[C++/Lua/Qt] Lua Funktion aufrufen

badday

Erfahrenes Mitglied
Moin zusammen,

ich habe hier ein Problem mit einem Programm und komme einfach nicht darauf, was falsch ist. Ich habe es schon versucht, in diversen IRC-Channels und einem anderen Forum Hilfe zu finden, leider konnte mir keiner helfen.
Das ganze ist relativ schwer zu beschreiben, aber ich versuche es einfach mal.

In mainwindow.cpp wird
Code:
lFunc *temp = new lFunc(label);
funcMap.insert(pair<QString, lFunc *>(label, temp));
connect(button, SIGNAL(clicked()), funcMap[label], SLOT(run()));

aufgerufen.
Zeile 1: lFunc ist eine Klasse:
Code:
class lFunc: public QObject
{
Q_OBJECT
public:
    lFunc(QString,  QObject* parent = 0);
    lFunc(QObject *parent = 0): QObject(parent) {}
public slots:
    void run();

private:
    QString funcName;
};

Z. 2: funcMap ist ein Map mit QString und lFunc * .
Z. 3: Hier wird der jeweilige Knopf mit dem Slot run() verbunden
Code:
void lFunc::run()
{
    lua_pushstring(MainWindow::script.get(), funcName.toAscii());
    lua_gettable(MainWindow::script.get(), LUA_GLOBALSINDEX);
    lua_pushnil(MainWindow::script.get()); //funktioniert auch ohne nicht
    if(lua_pcall(MainWindow::script.get(), 1, 0, 0)!=0)
    {
        QString info = lua_tostring(MainWindow::script.get(), -1);
        std::cout<<"error running function "<<funcName.toStdString()<<": "<<info.toStdString()<<std::endl;
    }
}

Hier ein Beispiel Skript:
Code:
require "mylib"
function getsin(x)
	mylib.PushButton("new", 23, 23)
	mylib.PushButton("next", 1, 1)
	mylib.LineEdit("test: ", 2, 2)
	return mylib.example(x)
end

function new_clicked()
	mylib.PushButton("made from new", 23, 24)
end
getsin(x) ist eine in C geschriebene Funktion und funktioniert.
Wenn ich
Code:
new_clicked()
einfach im Skript aufrufe, so funktioniert auch das.
Das Problem ist nur, dass wenn es über run() aufgerufen werden sollte der Fehler
error running function new_clicked: attempt to call a nil value
entsteht.
Versuchsweise luaL_dostring(L, "new_clicked()") funktionierte auch nicht.

MainWindow::script.get() gibt lua_State* zurück, das funktioniert auch, da ich lua_State *F = MainWindow::script.get(); ausgeführt habe und es - soweit ich das im Debugger sehe - einen richtigen Wert bekommt.
script ist ein statischer Member von MainWindow:
Code:
static Script script;
Es hat eine Methode get(), das wie oben beschrieben lua_State* zurückgibt.


Kann mir jemand weiterhelfen?

Gruß,

badday



EDIT:
Problem gelöst. Ich hatte intelligenter weise nicht das statische Script - Objekt benutzt. Ob es nur daran lag, kann ich aber nicht sicher sagen.
 
Zuletzt bearbeitet:
Zurück