如果编写了以下代码:
Repeater { model: 10;
delegate: Rectangle { width: 200; height:
20; color: "white";}}
如何为所有10个矩形赋予不同的ID?
答案 0 :(得分:3)
您不能分配其他ID,而且ID的范围是委托,限制范围是:如果要访问某项,则必须使用itemAt()
方法传递索引:
Repeater {
id: repeater
model: 10;
delegate: Rectangle {
width: 200;
height: 20;
color: "white";
}
}
// ...
var item = repeater.itemAt(2)
答案 1 :(得分:3)
根据您想做什么,您可以
您可以使用转发器的itemAt
方法访问元素的索引,如@eyllanesc所示。请小心,因为可能尚未实例化代表。
Repeater {
id: repeater
model: 5
Component.onCompleted: {
if (repeater.count > 0) {
var firstRect = repeater.itemAt(0)
// do something
}
}
Rectangle { /*...*/ }
}
itemAdded
信号您可以连接到Repeater
的{{3}}信号。每当添加一个项目时(当然)就会触发该信号,并将提供项目index
和item
。
Repeater {
id: repeater
model: 5
property Item firstRect
onItemAdded: {
// `index` and `item` come from the signal
if (index == 0) {
firstRect = item
// Or do something with item
}
}
Rectangle { /*...*/ }
}
您可以让矩形将自己分配给在其父对象之一中声明的属性。通常不希望这样做,因为您的委托人现在依赖于该命名属性,但这可能很有用。
Repeater {
id: repeater
model: 5
// That property can be anywhere
property Item firstRect
Rectangle {
id: rect
width: 50; height: 50;
Component.onCompleted: {
// Index is automatically populated by the Repeater
if (index == 0)
repeater.firstRect = rect
}
}
}
在大多数情况下,您要避免委托人对父母的任何依赖,因此首选解决方案A和B。但这总是取决于!