===== QScriptable ===== La classe QScriptable permet d'accéder à l'environnement Qt Script depuis les fonctions membres C++ de Qt. [[#Description détaillée|Plus d'informations...]] ==== Description détaillée ==== La classe QScriptable permet d'accéder à l'environnement Qt Script depuis les fonctions membres C++ de Qt. Avec [[qscriptengine#newQObject|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|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|QScriptEngine::newQObject()]] et enfin, vous passez le résultat à [[qscriptengine#setDefaultPrototype|QScriptEngine::setDefaultPrototype()]]. Voir [[script-defaultprototypes|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(thisObject()); } Voir aussi [[script-defaultprototypes|l'exemple Prototypes par défaut]] et [[qscriptengine#newFunction|QScriptEngine::newFunction()]]. ==== Fonctions membres ==== === argument() === ''[[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()]]. === 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()]]. === context() === ''[[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. === engine() === ''[[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. === thisObject() === ''[[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. ==== Remerciements ==== Merci à pour la traduction et à , ainsi qu'à pour leur relecture !