QObject在被放入QML变量后被破坏

时间:2017-02-15 15:56:05

标签: qt qml qtquick2

今天我在程序中遇到了一些奇怪的错误。继承自QObject的类的对象被类型为QEvent::DefferedDelete的事件删除,而没有人可能发送它。

它作为QVariant传递给QML:

// cpp: 
        Q_INVOKABLE QVariant currentDevice_v() const {
            return QVariant::fromValue(_current);
        }
// qml: 
       Component.onCompleted: {
            curDevice = devicesModel.currentDevice_v()
            #...
       }

没有那个qml行,一切都运行良好 - 没有任何东西产生删除事件。

1 个答案:

答案 0 :(得分:2)

我已经发现,如果我在将QObject的父级传递给QML之前设置它的父级,那么它就不会被删除。因此,我已经得出结论,将未经授权的QObject传递到QML范围会使该范围成为QObject的父级,并在范围结束后调用其析构函数。

分享这个,因为我还没有在任何地方找到答案。但在撰写这篇文章时,我发现了类似的未回答的问题:Qt5.6 QML, why are dynamic models destroyed after garbage collection?