La classe QScriptable permet d’accéder à l’environnement Qt Script depuis les fonctions membres C++ de Qt. Plus d'informations...
#include <QScriptable>
La classe QScriptable permet d’accéder à l’environnement Qt Script depuis les fonctions membres C++ de Qt.
Avec QScriptEngine::newQObject(), vous pouvez exposer les signaux, les slots et les propriétés de tout QObject (ou sous-classe) au code de script. QScriptable augmente cette fonctionnalité en donnant à vos membres C++ l’accès à l’environnement de Qt Script dans lequel ils sont invoqués ; conceptuellement, il est similaire à QObject::sender().
En réalisant une sous-classe de QScriptable, vous obtiendrez les fonctions suivantes : thisObject(), argumentCount(), argument(), context() et engine(). Avec ces fonctions, vous aurez un accès complet à l’environnement de Qt Script depuis les slots et l’accès aux fonctions de propriétés de votre classe, quand elles sont invoquées à partir du script.
Par exemple, vous pouvez lancer une exception Qt Script depuis un slot ; manipuler l’objet this
associé à la fonction appelée ; inspecter les arguments stockés dans le QScriptContext pour connaître les “vrais” arguments passés à la fonction du script et appeler des fonctions du script depuis votre slot.
Le cas d’utilisation typique de QScriptable est d’implémenter des prototypes objets pour personnaliser les types C++. Vous définissez les scripts d’interface de votre type personnalisé dans une sous-classe QScriptable en utilisant les propriétés et les slots. Ensuite, vous enveloppez une instance de votre classe en utilisant QScriptEngine::newQObject() et enfin, vous passez le résultat à QScriptEngine::setDefaultPrototype(). Voir l'exemple Prototypes par défaut pour constater comment cela peut être réalisé.
Le code suivant correspond à la réalisation classique d’une sous-classe de QScriptable :
class MyScriptableObject: public QObject, protected QScriptable { Q_OBJECT ... public slots: void doSomething(); double doSomethingElse(); }
L’unique différence avec la réalisation régulière d’une sous-classe de QObject est que vous héritez également de QScriptable.
Dans l’implémentation de votre slot, vous pouvez ensuite utiliser les fonctions héritées de QScriptable :
void MyScriptableObject::doSomething() { context()->throwError("Lance une erreur depuis un slot"); } double MyScriptableObject::doSomethingElse() { return qscriptvalue_cast<double>(thisObject()); }
Voir aussi l'exemple Prototypes par défaut et QScriptEngine::newFunction().
QScriptValue QScriptable::argument ( int index ) const
Retourne l’argument de la fonction dans l‘index
donné, ou un objet QScriptValue invalide si la fonction de Qt n’a pas été invoquée depuis le script.
Voir aussi argumentCount().
int QScriptable::argumentCount () const
Retourne le nombre d’arguments passés à la fonction dans cette invocation, ou -1 si la fonction de Qt n’a pas été invoquée depuis le script.
Voir aussi argument().
QScriptContext * QScriptable::context () const
Retourne un pointeur sur l’objet QScriptContext associé à la fonction courante de Qt appelée, ou 0 si la fonction de Qt n’a pas été invoquée depuis le script.
QScriptEngine * QScriptable::engine () const
Retourne un pointeur sur l’objet QScriptEngine associé à la fonction courante de Qt appelée, ou 0 si la fonction de Qt n’a pas été invoquée depuis le script.
QScriptValue QScriptable::thisObject () const
Retourne l’objet this
associé à la fonction courante de Qt appelée, ou un objet QScriptValue invalide si la fonction de Qt n’a pas été invoquée depuis le script.
Merci à <!xhell!> pour la traduction et à <!johnlamericain!>, <!dourouc!> ainsi qu’à <!jacques_jean!> pour leur relecture !
Copyright © 2025 Developpez LLC Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.