考虑这个例子:
通过QJSEngine将ObjectCreator设置为全局属性
// 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_计算的JavaScript脚本调用的C++函数中调用engine_->newQObject()是否有效
发布于 2020-09-04 04:26:58
是的,当从脚本调用时,C++调用QJSEngine::newQObject()是完全没问题的。
您可能遇到的问题是ECMAScript 5不支持const,这是QJSEngine的版本(请参阅QTBUG-69408上的解释)。用var替换它,它应该可以工作(尽管很明显它不是常量)。
https://stackoverflow.com/questions/63141687
复制相似问题