Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QJSEngine删除我的QObject,在QJSEngine::newQObject之后如何更改所有权?_C++_Qt_Qjsengine - Fatal编程技术网

C++ QJSEngine删除我的QObject,在QJSEngine::newQObject之后如何更改所有权?

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

尝试使用子类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);
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; 
}