使用带有QScriptEngine :: newFunction的成员函数

时间:2010-05-29 16:38:40

标签: c++ qt qtscript

让我们来看一个简单的类:

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);
    ....
}

上面的函数给出了一个错误: no matching function for call to ‘QScriptEngine::newFunction(<unresolved overloaded function type>, int)’

我尝试使用engine.newFunction(reinterpret_cast<FunctionSignature>(foo), 0);,但这给了我一个错误,基本上说编译器不知道名为'FunctionSignature'的关键字。

感谢任何帮助。非常感谢。

此致 罗汉

2 个答案:

答案 0 :(得分:1)

查看official example code,您应该执行以下操作:

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

编辑:好的,我更多地查看了参考文献。问题是,您尝试传递需要函数的方法。正如@ mosg指出的那样,这是不可能的。您可以使foo成为静态函数 - 或者在引用的线程中尝试解决方案。这意味着,您可以通过QObject创建新的engine.newQObject

答案 1 :(得分:0)

解静态方法:

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

...

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