C++ QJSEngine删除我的QObject,在QJSEngine::newQObject之后如何更改所有权?
尝试使用子类QObject作为参数执行小脚本C++ QJSEngine删除我的QObject,在QJSEngine::newQObject之后如何更改所有权?,c++,qt,qjsengine,C++,Qt,Qjsengine,尝试使用子类QObject作为参数执行小脚本 QJSEngine jsEngine; QJSValue arg = jsEngine.newQObject(child); // Child it's subclassed QObject QJSValue function = jsEngine.evaluate(m_childRestriction); QJSValue result = function.call(QJSValueList() << arg); QJSEngin
QJSEngine jsEngine;
QJSValue arg = jsEngine.newQObject(child); // Child it's subclassed QObject
QJSValue function = jsEngine.evaluate(m_childRestriction);
QJSValue result = function.call(QJSValueList() << arg);
QJSEngine;
QJSValue arg=jsEngine.newQObject(子项);//它是QObject的子类
QJSValue function=jsEngine.evaluate(m_childRestriction);
QJSValue result=function.call(QJSValueList()=0&&device.m_位置<16;
}
UPD:
可以调用对象的
QQmlEngine::setObjectOwnership(child,QQmlEngine::CppOwnership);
,因为它是静态函数。从帮助中不清楚。假设它也在QJSEngine
中。可以调用QQmlEngine::setObjectOwnership(child,qqqmlengine::CppOwnership);用于对象,因为它是静态函数。从帮助中看不清楚。假设它也在QJSEngine中。您可以尝试添加QQmlEngine::setObjectOwnership(这个,QQmlEngine::CppOwnership);
到你的对象的构造函数。不确定它是否适用于你的情况,但它确实阻止Qml删除我们的对象。我没有QQmlEngine,它继承了QJSEngine。你仍然可以使用@RetiredInja提到的方法。它在同一个Qt模块中(因此你总是可以使用它)它甚至被QJSEngine
内部使用!它实际上被QJSEngine
用于将对象的所有权设置为JavaScript。您可以像@RetiredInja所说的那样调用它,使其归CPP所有。哦,是的,这是一个静态函数…非常感谢。
function(device) {
return device.m_place >=0 && device.m_place < 16;
}