eingefügt wurde Heute habe ich merkwürdigen Programmfehler in unserem Programm gegenübergestellt. Das Objekt einer Klasse, die von QObject
geerbt wurde, wurde von Ereignis mit Typ QEvent::DefferedDelete
gelöscht, während niemand es möglicherweise senden konnte.QObject wird zerstört, nachdem es in die QML-Variable
Es wurde in QML als QVariant geben:
// cpp:
Q_INVOKABLE QVariant currentDevice_v() const {
return QVariant::fromValue(_current);
}
// qml:
Component.onCompleted: {
curDevice = devicesModel.currentDevice_v()
#...
}
Ohne diese alles qml Linie funktionierte gut - nichts produziert Ereignis löschen.
Sie haben Recht, überprüfen Sie hier: http://doc.qt.io/qt-5/qtqml-cppintegration-data.html#data-ownership. "Darüber hinaus respektiert die QML-Engine die normale QObject-Parent-Ownership-Semantik von Qt C++ - Objekten und löscht niemals eine QObject-Instanz, die ein Elternobjekt besitzt." Und wenn Sie cpp nicht explizit für ein QObject festlegen, wird QML standardmäßig die Eigentümerschaft beanspruchen. – Blabdouze
Sie können entweder ein übergeordnetes Element übergeben, um das C++ - Eigentum beizubehalten (das übergeordnete Objekt ist dann das Eignerobjekt), oder dem QML-Modul mitteilen, dass das Objekt C++ gehören soll. Verwenden Sie dazu 'QQmlEngine :: setObjectOwnership (object, QQmlEngine :: CppOwnership) ' –