===== 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 !