gpt4 book ai didi

qt - 如何调试错误 "Cannot read property of null"

转载 作者:行者123 更新时间:2023-12-04 12:01:12 25 4
gpt4 key购买 nike

在一个大型 QML 项目中,有时我会收到以下错误:

MyItem.qml:8: TypeError: Cannot read property of null



当我查看相关行时,它总是在一个子项中,具有一个属性绑定(bind)到一个父属性,如
Item
{
id: myItem

ASubItem
{
id: subItem
width: parent.width
}
}

因此,父项似乎变为空,并且内部项在此之后尝试更新其属性。

我们有时会从 C++ 中删除项目,因为我们想创建新项目,这似乎是错误消息的原因。我们还从 C++ 创建了一些项目(使用 QQmlComponent )并将父项和父项设置为 QQuickItem包含项目,但似乎我在其他项目上也收到此错误。

但我不明白为什么内部项目会在父项为空时尝试更新自己,不应该同时删除它吗?
有什么方法可以调试它以查看父项何时被删除以及其子项何时尝试更新?

最佳答案

一个对我有用的解决方法,但是我的情况有点不同,因为我是从 Javascript 而不是 c++ 动态创建对象,但我相信你可以弄清楚如何从 c++ 中做到这一点。
我将 QGuiApplication 实例传递给根 QML 上下文

    engine.rootContext()->setContextProperty("KApp",&app);
然后建立了这个联系
    Connections{ 
target: KApp;
onAboutToQuit:{
dynamicallyCreatedObject.destroy();
}
}
所以重点是,你必须在 aboutToQuit() 时销毁动态创建的 QML 对象。发出信号

关于qt - 如何调试错误 "Cannot read property of null",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49530908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com