1
今天我在我们的程序中遇到了一个奇怪的错误。 QObject
继承的类的对象被类型为QEvent::DefferedDelete
的事件删除,但没有人可以发送它。QObject在被放入QML变量后被破坏
它被传递到QML为的QVariant:
// cpp:
Q_INVOKABLE QVariant currentDevice_v() const {
return QVariant::fromValue(_current);
}
// qml:
Component.onCompleted: {
curDevice = devicesModel.currentDevice_v()
#...
}
如果没有QML线一切运作良好 - 没有产生删除事件。
您是对的,请点击此处:http://doc.qt.io/qt-5/qtqml-cppintegration-data.html#data-ownership。 “此外,QML引擎尊重Qt C++对象的正常QObject父所有权语义,并且永远不会删除具有父级的QObject实例。”而且,如果您不在QObject上明确设置cpp所有权,QML将默认声明所有权。 – Blabdouze
你可以通过一个父类来保持C++所有权(实际上父类是拥有者),或者使用'QQmlEngine :: setObjectOwnersship(object,QQmlEngine :: CppOwnership)告诉QML引擎你期望该对象被C++拥有)' –