[gelöst] QScriptEngine::evaluate und anonyme Funktionen

Alles rund um die Programmierung mit Qt
Antworten
René
Beiträge: 75
Registriert: 15. August 2006 11:14
Kontaktdaten:

[gelöst] QScriptEngine::evaluate und anonyme Funktionen

Beitrag von René »

Hallo,

ich arbeite gerade Kapitel 22 in der zweite Auflage vom Buch "C++ GUI Programmierung mit Qt4" durch. Dort wird im Beispiel "htmleditor" gezeigt, wie man Funktionen in ein Script auslagern kann um diese dann zur Laufzeit mittels qScriptConnect (ab Qt4.4) aufzurufen.

Dazu wird als Konvention angenommen, dass solch ein Skript ein ECMAScript-Objekt zurück geben muss.

Das Beispiel-Programm funktioniert nicht mehr seit Qt4.6.x, ich habe dazu diesen QTBUG gefunden:

http://bugreports.qt.nokia.com/browse/QTBUG-5757

Ich kann aber aus der Diskussion um anonyme Funktionen dort nicht erkennen, wie ich nun das Script, dass ein ECMAScript-Objekt zurück geben soll, anpassen muss, damit es mit Qt4.6.x verarbeitet werden kann.

Hier ein Beispiel, welches den <anonymous>() Fehler provoziert:

Code: Alles auswählen

var obj = new Object;

obj.name = "TestObjekt";
obj.doSomething = function()
{
  // Hier wird irgendwas ausgeführt
};

return obj;
Die Klammern um die Funktion zu setzen hilft nicht, also auch das hier erzeugt den <anonymous>() Fehler:

Code: Alles auswählen

var obj = new Object;

obj.name = "TestObjekt";
obj.doSomething = (function()
{
  // Hier wird irgendwas ausgeführt
});

return obj;
Als Zeile, in der der Fehler auftritt, wird übrigens immer die Zeile genannt, in der die "return obj;" Anweisung steht.
Zuletzt geändert von René am 10. September 2010 13:07, insgesamt 1-mal geändert.
René
Beiträge: 75
Registriert: 15. August 2006 11:14
Kontaktdaten:

Beitrag von René »

Die Lösung ist trivial, man muss sie nur kennen, wie immer...

Ich habe das Problem einfach mal an qt-book@trolltech.com gemailt, schließlich wird im Buch ja darauf verwiesen, dass man sich dort bei Problemen melden kann. Daraufhin hat sich einer der beiden Buch-Autoren, Mark Summerfield, persönlich gemeldet und bestätigt, dass es sich um einen lästigen Bug handelt, den man umgehen kann, in dem man in der letzten Zeile beim return Statement einfach das return entfernt. Also aus:

Code: Alles auswählen

return obj;
wird einfach nur und schon gehts. Allerdings weiß ich nicht, in wie weit das noch mit QTBUG-5757 zu tun hat und ob und wann das behoben wird.
Antworten