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++擁有)' –