一、描述
Repeater 类型用于创建大量相似的项目。是一种视图元素。与其他视图类型一样,Repeater 有一个模型和一个委托。
Repeater 项通常包含在定位器类型中,例如 Row 或 Column,以直观地定位由 Repeater 创建的多个委托项。
下面的 Repeater 在一行中创建了 Rectangle 项的三个实例:
import QtQuick 2.0
Row
{
Repeater
{
model: 3
Rectangle
{
width: 100; height: 40
border.width: 1
color: "yellow"
}
}
}
Repeater 的模型可以是任何受支持的数据模型。此外,与其他视图的委托一样,Repeater 委托可以访问其在 Repeater 中的索引,以及与委托相关的模型数据。
由 Repeater 实例化的项目按顺序插入,作为 Repeater 的父项的子项。Repeater 项拥有它实例化的所有项。删除或动态销毁由 Repeater 创建的项目会导致不可预测的行为。
Repeater 类型在第一次创建中继器时创建其所有委托项。如果有大量委托项并且不是所有的项都需要同时可见,则这可能是低效的。这种情况,请考虑使用其他视图类型,如 ListView(仅在滚动到视图中时创建委托项)或使用动态对象创建方法在需要时创建项。
另请注意,Repeater 是基于 Item 的,并且只能重复 Item 派生的对象。例如,它不能用于重复 QtObjects:
// 错误的代码:
Item
{
Repeater
{
model: 10
QtObject {}
}
}
二、属性成员
1、count : int
此属性保存模型中的项目数。
2、delegate : Component 【默认类型(省略 delegate)】
委托提供了一个模板,定义了由 Repeater 实例化的每个项目。
委托公开给只读索引属性,该属性指示 Repeater 中委托的索引。
例如,以下 Text 委托显示每个重复项的索引:
如果模型是字符串列表或对象列表,则委托还会公开给包含字符串或对象数据的只读 modelData 属性。例如:
3、model : any
为 Repeater 提供数据的模型。
此属性可以设置为任何受支持的数据模型:
- 一个数字,表示要由中继器创建的委托数量
- 模型(例如 ListModel 项或 QAbstractItemModel 子类)
- 一个字符串列表
- 对象列表
模型的类型会影响向委托公开的属性。
三、信号成员
1、itemAdded(int index, Item item)
当一个项目被添加到 Repeater 时会发出这个信号。
index 参数保存在 Repeater 中插入项的索引,item 参数保存已添加的项。
2、itemRemoved(int index, Item item)
当 item 从中继器中移除时,会发出此信号。index 参数保存从转发器中删除项的索引,而 item 参数保存删除的项。
如果 item 是由此转发器创建的,则不要保留对 item 的引用,因为在这些情况下,它会在处理信号后不久被删除。
四、成员函数
1、Item itemAt(index)
返回已在给定索引处创建的项,如果索引处不存在项,则返回 null。