2010-05-29 16 views
2

Prenons le cas d'une classe simple:l'aide d'une fonction membre avec QScriptEngine :: newFunction

QScriptEngine engine; 

class MyClass { 
public: 
    QScriptValue foo(QScriptContext*, QScriptEngine*); 
    MyClass(); 
}; 

QScriptValue MyClass:foo(QScriptContext* context, QScriptEngine* eng) { 
    //something 
} 

MyClass::MyClass() { 
    QScriptValue self = engine.newFunction(this->foo, 0); 
    .... 
} 

La fonction ci-dessus me donne une erreur: no matching function for call to ‘QScriptEngine::newFunction(<unresolved overloaded function type>, int)’

J'ai essayé d'utiliser engine.newFunction(reinterpret_cast<FunctionSignature>(foo), 0); mais cela donne moi une erreur qui dit essentiellement que le compilateur n'est pas au courant d'un mot-clé appelé 'FunctionSignature'.

Toute aide est appréciée. Merci beaucoup.

Cordialement, rohan

+0

Jetez un oeil ici: http://www.qtcentre.org/threads/10425-QtScript-newFunction-won-t-work Je pense que ce gars a trouvé la solution. .. – mosg

Répondre

1

En regardant dans le official example code, vous devez faire quelque chose comme ceci:

MyClass::MyClass() { 
    QScriptValue self = engine.newFunction(foo, 0); 
    .... 
} 

EDIT: OK, je regardais dans la référence un peu plus. Le problème est que vous essayez de passer une méthode, où une fonction est nécessaire. Comme l'a souligné @mosg, cela n'est pas possible. Soit vous faites foo une fonction statique - soit vous essayez la solution dans le thread référencé. Cela signifie que vous créez un nouveau QObject via engine.newQObject.

+0

Oui, c'était mon premier essai. Mais ça ne marche pas. –

0

Solution méthode statique:

class MyClass { 
public: 
    static QScriptValue foo(QScriptContext*, QScriptEngine*); 
    MyClass(); 
}; 

... 

QScriptValue func = engine.newFunction(MyClass::foo) 
+1

super ...... expliquer pourquoi? –

+0

désolé, ce n'était pas marqué comme résolu ... – ReinaldoJr