QScript / Q_INVOKABLE Überladene text() Funktion
Verfasst: 13. Juli 2009 16:30
Hallo,
aktuell nutze ich QScript. Soweit klappt auch alles wunderbar. Ich mache die C++ Objekte via Property der ScriptEngine bekannt, so dass man aus dem Script heraus auf die C++ Objekte drauf zugreifen kann.
Alle Funktionen, die als public slots zur Verfügung stehen, können auch direkt aus der Script Umgebung angesprochen werden.
Für alle anderen public eigenen Funktionen, die keine Slots sind, kann man das Macro Q_INVOKABLE verwenden, was auch funktioniert.
Nur zur Problemstellung:
Beispielcode:
Was habe ich damit vor:
Ich habe eine solche Klasse, die neben speziellen Funktionen auch schon vorhandene Funktionen der QLineEdit Klasse der Scriptumgebung bekannt machen soll. Da man schlecht in der QLineEdit Klasse das Q_INVOKABLE hinzufügen kann, ist mein Gedanke, diese zu überladen und in der überladenen Funktion die von der QLineEdit stammende Funktion aufzurufen.
Leider funktioniert dies nicht, denn dann erscheint zur Laufzeit folgende Fehlermeldung von der QScriptEngine:
Nun gut, ich könnte die Funktion auch in getText() beispielsweise umbenennen, denn damit funktioniert es, aber event. kann man oben beschriebene Konstellation erfüllen, damit die Namensbezeichnung gleich bleiben kann. Hat jemand eine Idee?
aktuell nutze ich QScript. Soweit klappt auch alles wunderbar. Ich mache die C++ Objekte via Property der ScriptEngine bekannt, so dass man aus dem Script heraus auf die C++ Objekte drauf zugreifen kann.
Alle Funktionen, die als public slots zur Verfügung stehen, können auch direkt aus der Script Umgebung angesprochen werden.
Für alle anderen public eigenen Funktionen, die keine Slots sind, kann man das Macro Q_INVOKABLE verwenden, was auch funktioniert.
Nur zur Problemstellung:
Beispielcode:
Code: Alles auswählen
...
class ScriptLineEdit : public QLineEdit
{
public:
Q_INVOKABLE QString text() const {return QLineEdit::text();}
...
};
Ich habe eine solche Klasse, die neben speziellen Funktionen auch schon vorhandene Funktionen der QLineEdit Klasse der Scriptumgebung bekannt machen soll. Da man schlecht in der QLineEdit Klasse das Q_INVOKABLE hinzufügen kann, ist mein Gedanke, diese zu überladen und in der überladenen Funktion die von der QLineEdit stammende Funktion aufzurufen.
Leider funktioniert dies nicht, denn dann erscheint zur Laufzeit folgende Fehlermeldung von der QScriptEngine:
Die Fehlermeldung stammt von der QScriptEngine Funktion uncaughtException().toString()Engine1 has uncaught exception: TypeError: text is not a function
Nun gut, ich könnte die Funktion auch in getText() beispielsweise umbenennen, denn damit funktioniert es, aber event. kann man oben beschriebene Konstellation erfüllen, damit die Namensbezeichnung gleich bleiben kann. Hat jemand eine Idee?