Repeater类型用于创建大量类似的项目。与其他视图类型一样,Repeater有一个模型和一个委托:对于模型中的每个条目,委托在一个使用模型数据的上下文中实例化。
本文: https://www.lovejia.win/blog/article/Repeater.html
参考原文:http://doc.qt.io/qt-5/qml-qtquick-repeater.html
属性说明
count : int
此属性保存中继器中的项目数。
delegate : Component
委托提供了定义由中继器实例化的每个项的模板。
代理暴露于只读index属性,指示中继器内的代理的索引
model : any
该模型为中继器提供数据。
此属性可以设置为任何受支持的数据模型:
1、表示中继器要创建的代表数量的数字
2、模型(例如ListModel项目或QAbstractItemModel子类)
3、字符串列表
4、对象列表
类型模型的影响被暴露于所述属性代表。
信号说明
itemAdded(int index,Item item)
当将项目添加到中继器时发射该信号。所述索引参数保存在该项目已被插入的中继器中的索引,并且该项目参数保存物品已被添加。
相应的处理程序是onItemAdded。
itemRemoved(int index,Item item)
当从中继器中移除项目时发射该信号。所述索引参数保存在该项目是从中继除去指数,和项参数保存物品被移除。
如果由此中继器创建的项目不保留引用,因为在这些情况下,它将在处理信号后不久删除。
相应的处理程序是onItemRemoved。
方法说明
Item itemAt(index)
返回在给定索引处创建的项目,如果索引中没有项目,则为null。
功能简述
Repeater类型用于创建大量类似的项目。与其他视图类型一样,Repeater有一个模型和一个委托:对于模型中的每个条目,委托在一个使用模型数据的上下文中实例化。
Repeater项通常包含在定位器类型(如Row或Column)中,以可视地定位由Repeater创建的多个委托项。
Repeater的模型可以是任何支持的数据模型。此外,与其他视图的代理一样,Repeater代理可以访问其在中继器内的索引,以及与代理相关的模型数据。
由Repeater实例化的项目按顺序插入作为中继器父节点的子节点。插入在其父堆叠列表中的Repeater位置之后立即开始。这允许在布局内使用中继器。
Repeater类型在首次创建中继器时创建其所有委托项。如果有大量的委托项目并且不是所有项目都需要同时可见,这可能是低效的。如果是这种情况,请考虑使用其他视图类型,例如ListView(当它们滚动到视图时只创建委托项目),或者使用动态对象创建方法根据需要创建项目。
例
以下示例直放站创建的三个实例矩形一个内项行:
1 | import QtQuick 2.0 |
以下示例Repeater的项目堆叠在红色矩形和蓝色矩形之间:
1 | import QtQuick 2.0 |
注意: Repeater项目拥有它实例化的所有项目。删除或动态破坏由Repeater创建的项目会导致不可预测的行为。
以下示例Repeater不能用于重复QtObjects:
1 | //坏代码 |
注意,Repeater是基于项的,并且只能重复Item -derived对象。
以下示例Text代理显示每个重复项的索引:
1 | Column { |
如果模型是字符串列表或对象列表,则委托还会暴露给modelData保存字符串或对象数据的只读属性。例如:
1 | Column { |
如果模型是一个模型对象(例如ListModel),委托可以访问所有模型角色作为命名属性,就像代理对视图类像ListView一样。
以下示例Repeater使用model,和delegate:
1 | Rectangle { |