删除在 QML 中使用 SetContextProperty 注册的 C++ 模型



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

当我关闭程序时出现问题:我使用以下代码从 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.

相关内容

  • 没有找到相关文章

最新更新