Anwendungen skriptfähig machen
Qt bietet Unterstützung für die Skriptierung von Anwendungen mit JavaScript. Die folgenden Anleitungen und Referenzen behandeln verschiedene Aspekte der Programmierung mit JavaScript und Qt.
Skriptklassen
Die folgenden Klassen erweitern Qt-Anwendungen um Skriptfunktionen.
Umgebung zur Ausführung von JavaScript-Code | |
Arbeitet mit primitiven Typen gemäß der JavaScript-Semantik | |
Dient als Container für Qt/JavaScript-Datentypen | |
Iterator im Java-Stil für QJSValue |
Grundlegende Verwendung
Um Skriptcode auszuwerten, erstellen Sie ein ` QJSEngine ` und rufen dessen `evaluate()`-Funktion auf, wobei Sie den auszuwertenden Skriptcode (Text) als Argument übergeben.
Der Rückgabewert entspricht dem Ergebnis der Auswertung (dargestellt als „ QJSValue “-Objekt); dieser kann in Standard-C++- und Qt-Typen konvertiert werden.
Benutzerdefinierte Eigenschaften können Skripten zur Verfügung gestellt werden, indem sie bei der Skript-Engine registriert werden. Am einfachsten geschieht dies durch das Setzen von Eigenschaften des globalen Objekts der Skript-Engine:
engine.globalObject().setProperty("foo", 123);
qDebug() << "foo times two is:" << engine.evaluate("foo * 2").toNumber();Dadurch werden die Eigenschaften in die Skriptumgebung eingebunden und stehen somit dem Skriptcode zur Verfügung.
Ein QObject für die Skript-Engine verfügbar machen
Jede auf QObject basierende Instanz kann für die Verwendung mit Skripten bereitgestellt werden.
Wenn ein ` QObject ` an die Funktion ` QJSEngine::newQObject()` übergeben wird, wird ein Qt-Script-Wrapper-Objekt erstellt, mit dem die Signale, Slots, Eigenschaften und untergeordneten Objekte des ` QObject` für Skripte verfügbar gemacht werden können.
Hier ist ein Beispiel dafür, wie eine Instanz einer Unterklasse von ` QObject ` unter dem Namen ` "myObject"` für Skriptcode verfügbar gemacht wird:
QJSEngine engine;
QObject *someObject = new MyObject;
QJSValue objectValue = engine.newQObject(someObject);
engine.globalObject().setProperty("myObject", objectValue);Dadurch wird in der Skriptumgebung eine globale Variable namens „ myObject “ erstellt. Die Variable dient als Proxy für das zugrunde liegende C++-Objekt. Beachten Sie, dass der Name der Skriptvariable beliebig sein kann; d. h., er ist nicht von „ QObject::objectName()“ abhängig.
Auswirkungen auf die Anwendungssicherheit
Das Sicherheitsmodell für Anwendungsskripte mit JavaScript folgt dem gleichen Prinzip wie bei C++-Code: Der Benutzer installiert Skripte, denen er vertraut, genauso wie er Qt-Anwendungen installiert.
Um das Vertrauen der Benutzer zu wahren, sollten Anwendungsentwickler keinen beliebigen JavaScript-Code auswerten. Die Sandbox der JavaScript-Engine ist lediglich eine semantische Barriere. Das Skript wird im selben Prozess und mit denselben Berechtigungen wie der Rest der Anwendung ausgewertet und nutzt denselben Speicher. Folglich sind C++-Objekte, die für Skripte zugänglich sind, ohne zusätzliche Sicherheitsvorkehrungen erreichbar.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.