0%

Repeater属性说明

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
2
3
4
5
6
7
8
9
10
11
import QtQuick 2.0
Row {
Repeater {
model: 3
Rectangle {
width: 100; height: 40
border.width: 1
color: "yellow"
}
}
}

以下示例Repeater的项目堆叠在红色矩形和蓝色矩形之间:

1
2
3
4
5
6
7
8
9
import QtQuick 2.0
Row {
Rectangle { width: 10; height: 20; color: "red" }
Repeater {
model: 10
Rectangle { width: 20; height: 20; radius: 10; color: "green" }
}
Rectangle { width: 10; height: 20; color: "blue" }
}

注意: Repeater项目拥有它实例化的所有项目。删除或动态破坏由Repeater创建的项目会导致不可预测的行为。

以下示例Repeater不能用于重复QtObjects:

1
2
3
4
5
6
7
8
//坏代码
Item {
Can't repeat QtObject as it doesn't derive from Item.
Repeater {
model: 10
QtObject {}
}
}

注意,Repeater是基于项的,并且只能重复Item -derived对象。

以下示例Text代理显示每个重复项的索引:

1
2
3
4
5
6
Column {
Repeater {
model: 10
Text { text: "I'm item " + index }
}
}

如果模型是字符串列表或对象列表,则委托还会暴露给modelData保存字符串或对象数据的只读属性。例如:

1
2
3
4
5
6
Column {
Repeater {
model: ["apples", "oranges", "pears"]
Text { text: "Data: " + modelData }
}
}

如果模型是一个模型对象(例如ListModel),委托可以访问所有模型角色作为命名属性,就像代理对视图类像ListView一样。

以下示例Repeater使用model,和delegate:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Rectangle {  
width: 400;height: 300
ListModel {
id: msnModel
ListElement {
name: "01"
pic: "images/Messenger_01.png"
}
ListElement {
name: "02"
pic: "images/Messenger_02.png"
}
ListElement {
name: "03"
pic: "images/Messenger_03.png"
}
ListElement {
name: "04"
pic: "images/Messenger_04.png"
}
}
Component {
id:msnDelegate
Rectangle{
Image{ id:img; source: pic;width: 80;height: 80;x: index*80;y: 0}
Text { text: name;x: index*80+img.width/2;y: img.height }
}
}
Repeater {
model: msnModel
delegate:msnDelegate
}
}
------本文结束    感谢阅读------
你打赏你的,我分享我的!