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.
Environnement d'évaluation du code JavaScript | |
Opère sur les types primitifs dans la sémantique JavaScript | |
Agit comme un conteneur pour les types de données Qt/JavaScript | |
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.
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.