Alias.qml
import QtQuick 2.0
Rectangle {
width: 100
height: 62
property var arr : [1,2,3,4]
}
Access.qml
import QtQuick 2.0
Rectangle {
id: newq
width: 100
height: 62
property var yy : [1]
property var pp : [1]
onPpChanged:
{
console.log("\npp: " + pp.pop())
console.log("\nyy: " + newq.yy.length + "\n")
}
}
main.qml
import QtQuick 2.0
Rectangle {
id: root
width: 360
height: 360
Alias
{
id: poi
}
Access
{
pp: poi.arr
}
}
此行显示错误:
console.log("\nyy: " + newq.yy.length + "\n")
我哪里错了?
答案 0 :(得分:2)
这是因为yy
更改后pp
属性尚未初始化。您可以通过更改Access.qml
:
import QtQuick 2.0
Rectangle {
id: newq
width: 100
height: 62
property var yy : [1]
property var pp : [1]
onYyChanged: console.log("yy changed: " + yy)
onPpChanged:
{
console.log("pp changed: " + pp)
console.log("\nyy: " + newq.yy.length + "\n")
}
}
输出:
qml:pp已更改:1,2,3,4
file:/// E:/Dev/Projects/qt/qml-test/Access.qml:17:TypeError:无法读取属性' length'未定义的
qml:yy已更改:1
您可以看到yy
最终已初始化,但不会在pp
之前。你应该通过if (newq.yy)
检查来防范这种情况,或者如果可能的话,重构代码以避免这种情况。
不应依赖属性赋值和绑定的顺序,因为QML是一种声明性语言。
一些相关的阅读: