将成员函数与 QScriptEngine::newFunction 一起使用

发布于 2024-09-03 10:00:49 字数 702 浏览 8 评论 0原文

让我们以一个简单的类为例:

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

上面的函数给了我一个错误: 没有匹配的函数来调用 'QScriptEngine::newFunction(, int)'

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

任何帮助表示赞赏。多谢。

问候, 罗汉

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 keyword called 'FunctionSignature'.

Any help is appreciated. Thanks a lot.

Regards,
rohan

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

香草可樂 2024-09-10 10:00:49

查看官方示例代码,您应该执行以下操作:

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

编辑:好的,我进一步研究了参考文献。问题是,您尝试传递需要函数的方法。正如 @mosg 指出的,这是不可能的。要么将 foo 设为静态函数,要么在引用的线程中尝试解决方案。这意味着,您可以通过 engine.newQObject 创建一个新的 QObject

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.

请别遗忘我 2024-09-10 10:00:49

解决静态方法:

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

...

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

Solution static method:

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

...

QScriptValue func = engine.newFunction(MyClass::foo)  
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文