删除使用SetContextProperty在qml中注册的c ++模型

时间:2017-10-26 10:19:02

标签: qt qml qt5

我有一个继承QAbstractListModel的类。它的实例(使用new运算符动态创建)在qml中使用setContextProperty()注册。在Qml中,它与GridLayoutRepeater一起使用。

问题出现了,当我关闭我的程序时:我使用以下代码从qml执行:

    quitButton{
        onClicked: {
            application.close();
            Qt.quit()
        }
    }

程序崩溃

delete(instanceOfModelClass);

有访问权限违规。我尝试为这个实例设置QObject的父级,为引擎中的这个对象设置QQmlEngine :: CppOwnership,但它仍然无法正常工作。

我如何解决这个问题?

P.S。如果我删除了删除(instanceOfModelClass);它会起作用,但是,正如我所理解的那样,会有模因泄漏。

2 个答案:

答案 0 :(得分:0)

问题解决了,当QObjects父母被设置时。并按正确的顺序删除电话。

答案 1 :(得分:-1)

我认为你的程序崩溃了,因为之前已经在其他地方删除了指针。在删除之前尝试检查指针是否仍然存在,你可以这样做:

if (myPointer != nullptr) delete myPointer;

另一个替代方法是使用QScopedPointer,当它超出范围时会自动删除指针。我想你在main函数中创建了指针,所以就像这样:

QScopedPointer<MyClass> scp(new MyClass()); // no need to set a parent
MyClass* myClassPtr = scp.data(); // use this one to pass it to the qml context.