我的代码:
import QtQuick 2.7
import QtQuick.Window 2.2
Window {
visible: true
width: 640
height: 480
Column {
Row {
Repeater {
id: rectRepeater
model: 3
Rectangle {
width: 30
height: 30
color: "red"
radius: 10
}
}
}
Row {
Repeater {
model: 3
Text {
text: rectRepeater.itemAt(0).width;
}
}
}
}
}
我收到此错误消息:
TypeError:无法读取null
的属性'width'
我发现this post说解决方法就是像这样使用Component.onCompleted
(只需在Text对象中插入一个Component.onCompleted
处理程序):
import QtQuick 2.7
import QtQuick.Window 2.2
Window {
visible: true
width: 640
height: 480
Column {
Row {
Repeater {
id: rectRepeater
model: 3
Rectangle {
width: 30
height: 30
color: "red"
radius: 10
}
}
}
Row {
Repeater {
model: 3
Text {
Component.onCompleted: {
text: rectRepeater.itemAt(0).width;
}
}
}
}
}
}
但这失败并出现同样的错误。
有什么想法吗?
答案 0 :(得分:1)
rectRepeater
时, itemAt(0)
项不会退出。
在实例化itemAt
时,您应该致电rectRepeater
。
Window {
visible: true
width: 640
height: 480
Column {
Row {
Repeater {
id: rectRepeater
model: 3
Rectangle {
width: 30
height: 30
color: "red"
radius: 10
}
}
}
Row {
Repeater {
id: textrep
model: 3
Text {
}
}
}
Component.onCompleted: {
//Here all object are instantiated
for (var i = 0; i< textrep.count; i++){
textrep.itemAt(i).text = rectRepeater.itemAt(0).width
}
}
}
}
答案 1 :(得分:1)
我会选择条件绑定
Text {
text: rectRepeater.count > 0 ? rectRepeater.itemAt(0).width : 0;
}
一旦rectRepeater实际创建了至少一个委托,就会读取该委托的值。 即使rectRepeater的模型在某个时刻再次变空或者索引0处的项目改变其宽度
也是如此