我有一个类,它继承了QAbstractListModel
.它是在 qml 中使用 setContextProperty()
注册的实例(使用 new
运算符动态创建)。在 Qml 中,它与 GridLayout
和 Repeater
一起使用。
当我关闭程序时出现问题:我使用以下代码从 qml 执行此操作:
quitButton{
onClicked: {
application.close();
Qt.quit()
}
}
程序崩溃
delete(instanceOfModelClass);
与访问冲突。我尝试为此实例设置 QObject 的父级,在引擎中为此对象设置 QQmlEngine::CppOwnership,但它仍然不起作用。
我该如何解决这个问题?
附言如果我删除了删除(实例模型类);行它会起作用,但是,据我了解,会有微不足道的泄漏。
设置了 QObjects 父项时,问题就解决了。并按正确的顺序删除呼叫。
我认为您的程序崩溃是因为指针之前已在其他地方删除。在删除指针之前,尝试检查指针是否仍然存在,您可以执行以下操作:
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.