Let's take the case of a simple class:
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);
....
}
The above function gives me an error:
no matching function for call to ‘QScriptEngine::newFunction(<unresolved overloaded function type>, int)’
I have tried using engine.newFunction(reinterpret_cast<FunctionSignature>(foo), 0);
but this gives me an error which basically says that the compiler is not aware of a keywo开发者_如何学JAVArd called 'FunctionSignature'
.
Any help is appreciated. Thanks a lot.
Regards, rohan
Looking into the official example code, you should do something like this:
MyClass::MyClass() {
QScriptValue self = engine.newFunction(foo, 0);
....
}
EDIT: OK, I looked into the reference a little bit more. The problem is, that you try to pass a method, where a function is needed. As @mosg pointed out, this isn't possible. Either you make foo
a static function - or you try the solution in the referenced thread. This means, that you create a new QObject
via engine.newQObject
.
Solution static method:
class MyClass {
public:
static QScriptValue foo(QScriptContext*, QScriptEngine*);
MyClass();
};
...
QScriptValue func = engine.newFunction(MyClass::foo)
精彩评论