Seite 1 von 1

QScript: Im Script auf public Memberfunktionen zugreifen

Verfasst: 13. Mai 2009 11:18
von Chris81T
Hallo,

momentan mache ich meine ersten Schritte mit QtScript. Ansich find ich QScript für gewisse Anwendungsfälle sehr nützlich.

Zum Thema:
Ich bin auf dem Stand, dass ich zB. eigene von QObject geerbte Klassenobjekte der ScriptEngine als Property bekannt machen kann.

Pseudo-Bsp.:

Code: Alles auswählen

MyObject* obj = new MyObject;
QScriptValue scrObj = scriptEngine->newQObject(obj);
scriptEngine->globalObject().setProperty("OBJ",obj);
 
Gehen wir davon aus, dass MyObject einen eigenen public slot ( void slot() ) besitzt, könnte ich nun in der Script-Umgebung, diesen Slot so aufrufen:

Code: Alles auswählen

function blub {
OBJ.slot();
}
Soweit so gut. Wenn wir nun noch davon ausgehen, dass MyObject auch eine public function ( void myFunc() ) besitzt, habe ich nicht die Möglichkeit, diese im Script aufzurufen:

Code: Alles auswählen

function blub {
OBJ.myFunc();
}
Dann bekomm ich eine Script Exception: ReferenceError: myFunc is not defined

Nun gut, der Unterschied ist ja, dass bei dem Public slot ja der MOCompiler diverse Meta Eigenschaften setzt und dadurch auch dieser MemberSlot in der Script Umgebung bekannt wird (Denk ich).

Habe ich irgendwie eine Möglichkeit, public Function in irgendeiner Art zu "registrieren"? Es gibt ja Funktionen wie qRegisterMetaType, aber die beziehen sich ja auf Typen und nicht auf gezielte Funktionen.

Man könnte zwar sagen, ich mach all meine benötigten Funktion (verfügbar für Scriptumgebung) als slots, aber wenn ich zB. an ein em QLineEdit Obj in der Script-Umgebung eine "normale" Funktion aufrufen möchte, hätte ich dann ein Problem.

Ich finde den entscheidenden Hinweis in der Doku nicht.

Wer hat Ahnung?

Verfasst: 13. Mai 2009 11:44
von franzf
Dann lies dir doch mal die Doku zum QtScript-Module durch.
Insbesondere das Kapitel Making C++ Class Member Functions Available in QtScript.
Hoffe das klappt ;)

Verfasst: 13. Mai 2009 12:22
von upsala
Das bringt ihn aber auch nicht weiter. Aber Trolltech hatte doch mal bei den Labs eine Erweiterung, mit denen sämtliche Qt-Funktionen in QtScript verwendet werden können.

Das müsste das hier sein.

Verfasst: 13. Mai 2009 13:02
von franzf
Ok, hast recht :)
Ein QLineEdit wird er nur mit dem QScriptGenerator komplett ansprechen können.

Aber für eigene Klassen (wie er das anfangs an dem MyObject demonstriert hat) führt der einfachste Weg über Q_INVOKABLE.
Oder gleich selber die eigenen Libs dem QScriptGenerator folgend in ein QtScript-Extension packen.

Verfasst: 13. Mai 2009 14:54
von Chris81T
Danke für die Infos!

Da hab ich wohl Tomaten auf den Augen gehabt :) da ich das mit dem Q_INVOKABLE nicht gelesen hab..

Auch vielen Dank für den Link zum ScriptGenerator. Ich werde es (vorerst) nicht zwingend brauchen, dass ich auf Funktionalitäten eines zB. QLineEdits zurückgreife, aber trotzdem gut zu wissen.