Bonjour,
Je souhaite scripter une application.
L'application est simplement une mémoire accessible en lecture/écriture encapsuler dans une classe dérivée QObject .
Soit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 class QMemory : public QObject { Q_OBJECT Q_INVOKABLE int read(qint32 addr, qint32 & val) ; Q_INVOKABLE int write(qint32 addr, qint32 & val) ; }
Je place à disposition du script ma mémoire instanciée comme indiqué dans la doc Qt "Making a QObject Available to the script Engine"
Maintenant dans le code du script j'ai des fonctions accédant à la mémoire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ... QScriptEngine engine ; QMemory * pMem = new QMemory() ; QScriptValue objectValue = engine.newQObject(pMem) ; engine.globalObject().setProperty("Memory", objectValue) ; ...
Ces fonctions sont accessibles depuis la GUI. En effet à l'initialisation après avoir ouvert le fichier de script je parse toutes les propriétés globales (donc les fonctions) et je les rends accessible sur la GUI via une liste dynamique de boutons qui ont le nom de la fonction.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 function updateMem() { this.Memory.write(0,1) ; return 0 ; }
Appuyer sur un bouton provoque le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 qint32 Controlleur::exec (const QString & szFunc) { QScriptValue ret ; ret = m_engine.globalObject().property(szFunc).call(QScriptValue()) ; Q_ASSER(ret.isValid()) ; return ret.toInt32 ; }
Voilà mais bien sur rien fonctionne.
Partager