Sur cette page

Rendre les applications scriptables

Qt prend en charge l'écriture de scripts d'application avec JavaScript. Les guides et références suivants couvrent certains aspects de la programmation avec JavaScript et Qt.

Classes de script

Les classes suivantes ajoutent des capacités de script aux applications Qt.

QJSEngine

Environnement d'évaluation du code JavaScript

QJSPrimitiveValue

Opère sur les types primitifs dans la sémantique JavaScript

QJSValue

Agit comme un conteneur pour les types de données Qt/JavaScript

QJSValueIterator

Itérateur de style Java pour QJSValue

Utilisation de base

Pour évaluer un code de script, vous créez un QJSEngine et appelez sa fonction evaluate(), en passant le code de script (texte) à évaluer comme argument.

QJSEngine moteur ;qDebug() << "the magic number is:" << engine.evaluate("1 + 2").toNumber();

La valeur de retour sera le résultat de l'évaluation (représenté sous la forme d'un objet QJSValue ) ; celui-ci peut être converti en types C++ et Qt standard.

Les propriétés personnalisées peuvent être mises à la disposition des scripts en les enregistrant auprès du moteur de script. La méthode la plus simple consiste à définir les propriétés de l'objet global du moteur de script :

engine.globalObject().setProperty("foo", 123) ;qDebug() << "foo times two is:" << engine.evaluate("foo * 2").toNumber();

Cela place les propriétés dans l'environnement de script, les rendant ainsi disponibles pour le code de script.

Mise à disposition d'un QObject pour le moteur de script

Toute instance basée sur QObject peut être mise à la disposition des scripts.

Lorsqu'un QObject est passé à la fonction QJSEngine::newQObject(), un objet Qt Script wrapper est créé et peut être utilisé pour rendre les signaux, les slots, les propriétés et les objets enfants du QObject disponibles pour les scripts.

Voici un exemple de mise à disposition d'une instance d'une sous-classe QObject au code script sous le nom "myObject":

QJSEngine engine;
QObject *someObject = new MyObject;
QJSValue objectValue = engine.newQObject(someObject);
engine.globalObject().setProperty("myObject", objectValue);

Cela créera une variable globale appelée myObject dans l'environnement du script. La variable sert de proxy à l'objet C++ sous-jacent. Notez que le nom de la variable de script peut être quelconque, c'est-à-dire qu'il ne dépend pas de QObject::objectName().

Implications pour la sécurité des applications

Le modèle de sécurité des scripts d'application avec JavaScript suit le même modèle que pour le code C++ : l'utilisateur installe des scripts à exécuter auxquels il fait confiance de la même manière qu'il installe des applications Qt.

Afin de préserver la confiance des utilisateurs, les développeurs d'applications ne doivent pas évaluer le code JavaScript arbitraire. Le bac à sable du moteur JavaScript n'est qu'une barrière sémantique. Le script est évalué dans le même processus et avec les mêmes privilèges que le reste de l'application et partage la même mémoire. Par conséquent, les objets C++ exposés aux scripts sont accessibles sans garde-fou supplémentaire.

© 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.