Rendre les applications scriptables
Qt prend en charge la scriptabilité des applications avec JavaScript. Les guides et références suivants traitent des différents aspects de la programmation avec JavaScript et Qt.
Classes de script
Les classes suivantes ajoutent des fonctionnalités de script aux applications Qt.
Environnement d'exécution du code JavaScript | |
Opère sur les types primitifs selon la sémantique JavaScript | |
Sert de conteneur pour les types de données Qt/JavaScript | |
Itérateur de type Java pour QJSValue |
Utilisation de base
Pour évaluer du code de script, vous créez un objet ` QJSEngine ` et appelez sa fonction `evaluate()`, en lui transmettant le code de script (texte) à évaluer en tant qu’argument.
La valeur de retour correspondra au résultat de l'évaluation (représenté sous la forme d'un objet ` QJSValue `) ; celle-ci peut être convertie 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. Le moyen le plus simple d’y parvenir 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 accessibles au code de script.
Rendre un QObject accessible au moteur de script
Toute instance basée sur QObject peut être rendue accessible aux scripts.
Lorsqu’un objet QObject est transmis à la fonction QJSEngine::newQObject(), un objet wrapper Qt Script est créé ; celui-ci permet de rendre les signaux, les slots, les propriétés et les objets enfants de l’ QObject accessibles aux scripts.
Voici un exemple illustrant comment rendre une instance d’une sous-classe de ` QObject ` accessible au code de 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. Cette variable sert de proxy pour 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 en JavaScript suit le même modèle que celui du code C++ : l'utilisateur installe les scripts qu'il juge fiables pour les exécuter, 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 de 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 mesures de sécurité supplémentaires.
© 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.