我的代码:
import QtQuick 2.6
import QtQuick.Window 2.2
Window {
visible: true
width: 640
height: 480
Item {
id: loaderParent
Loader {
id: loader
active: true
sourceComponent: Item {
parent: loaderParent
x: parent.x
}
}
}
Item {
focus: true
Keys.onPressed: {
loader.active = false;
}
}
}
当我按任意键时,我收到此错误:
qrc:/main.qml:16:TypeError:无法读取null
的属性
我以为我怀疑这个错误是无害的,我想解释或修改/解决方法的任何想法?
报告here。
答案 0 :(得分:0)
我找到了一种解决方法:取代parent.x
,而不是抓取loaderParent.x
。仍然想知道问题发生的原因。
答案 1 :(得分:0)
Loader
似乎在销毁时将项目父级设置为null。 QML对象不会立即删除,而是使用deleteLater()
使对象保持活动状态以进行另一个事件循环。
这导致重新评估绑定表达式,由于父级现在为null,因此不再可能。我遇到过这种行为described here的更严重的遭遇。
避免它的一种简单方法是不使用您已找到的父属性,或使用更复杂的绑定表达式,例如x: loader.active ? parent.x : someFailsafeValue
。
通过使用onParentChanged: console.log(parent)
,您可以验证在取消激活加载器时父级确实更改为null。