考虑以下示例:
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_
是否有效?
答案 0 :(得分:0)
是的,从脚本调用C ++来调用QJSEngine::newQObject()
是完全可以的。
您可能遇到的问题是QJSEngine的ECMAScript 5不支持const
(请参阅QTBUG-69408的说明)。用var
替换它,它应该可以工作(尽管显然不是常数)。