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

时间:2020-07-28 19:44:19

标签: c++ qt qml qjsengine

考虑以下示例:

ObjectCreator通过QJSEngine设置为全局属性:

// 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_中进行了评估):

function f
{
        // objectCreator is a global property of engine_
        const someObj = objectCreator.createObj();
}

阅读documentation后,我找不到此问题的答案:

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

1 个答案:

答案 0 :(得分:0)

是的,从脚本调用C ++来调用QJSEngine::newQObject()是完全可以的。

您可能遇到的问题是QJSEngine的ECMAScript 5不支持const(请参阅QTBUG-69408的说明)。用var替换它,它应该可以工作(尽管显然不是常数)。

相关问题