Sur cette page

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.

QJSEngine

Environnement d'exécution du code JavaScript

QJSPrimitiveValue

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

QJSValue

Sert de conteneur pour les types de données Qt/JavaScript

QJSValueIterator

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.

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

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.