首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在脚本调用的C++函数中调用QJSEngine::newQObject()是否有效?

在脚本调用的C++函数中调用QJSEngine::newQObject()是否有效?
EN

Stack Overflow用户
提问于 2020-07-29 03:44:19
回答 1查看 118关注 0票数 0

考虑这个例子:

通过QJSEngineObjectCreator设置为全局属性

代码语言:javascript
复制
// ObjectCreator is exposed to engine_ env as global property
class ObjectCreator : public QObject
{
    Q_OBJECT

public:
    ObjectCreator(QJSEngine * engine, QObject * parent = nullptr) : QObject(parent), engine_(engine) {}
    
    // Called from script env
    Q_INVOKABLE QJSValue createObject();

private:
    
    // engine_ is not owned
    QJSEngine * engine_ = nullptr;
};

class SomeObj : public QObject
{
    // ...
};

QJSValue ObjectCreator::createObject()
{
    // No parent due to JavaScriptOwnership
    return engine_->newQObject(new SomeObj());
}

JavaScript (在engine_中根据以前的代码片段进行求值):

代码语言:javascript
复制
function f
{
        // objectCreator is a global property of engine_
        const someObj = objectCreator.createObj();
}

阅读documentation时,我找不到这个问题的答案:

在通过engine_计算的JavaScript脚本调用的C++函数中调用engine_->newQObject()是否有效

EN

回答 1

Stack Overflow用户

发布于 2020-09-04 04:26:58

是的,当从脚本调用时,C++调用QJSEngine::newQObject()是完全没问题的。

您可能遇到的问题是ECMAScript 5不支持const,这是QJSEngine的版本(请参阅QTBUG-69408上的解释)。用var替换它,它应该可以工作(尽管很明显它不是常量)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63141687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档