qml Repeater 详解
创作时间:
作者:
@小白创作中心
qml Repeater 详解
引用
CSDN
1.
https://m.blog.csdn.net/ckg3824278/article/details/145059727
概述
Repeater是Qt Quick中用于动态创建重复元素的容器组件。它通过指定一个模型数据(如数组或列表)来创建多个相同类型的子项,并将这些子项按顺序渲染在界面上。Repeater是一种非常有效的方式来处理动态生成的用户界面元素,尤其是当你需要根据数据源生成多个相似控件时。Repeater可以与数据模型(例如ListModel或Array)结合使用,通过循环创建子项。子项会根据模板进行创建,模板通常是一个QML组件或元素。
重要属性
- model:绑定一个模型数据,可以是ListModel、Array或其他适配的数据源。Repeater会根据此模型的数据动态生成多个子项。
- delegate:指定一个QML组件或元素,作为重复生成的每个子项的模板。每个模型项都会根据此模板创建对应的子项。
- count:定义重复创建的子项数量。如果设置为数字,Repeater将根据该数量创建指定数量的子项。如果绑定到一个模型,count会自动等于模型的项数。
- item:表示当前重复的子项。它是一个只读属性,指向当前生成的子项。
- visible:控制Repeater本身是否可见。设置为false时,Repeater会隐藏,但是它仍然会按需创建子项。
- anchors:控制Repeater本身在父元素中的位置。
重要方法
- clear():清空所有已创建的子项。如果需要重新加载模型数据或清除当前生成的子项,可以使用此方法。
- itemAt(index):根据索引获取指定的子项。如果需要访问某个特定位置的子项,可以使用此方法。
- removeItem(index):从Repeater中移除某个子项。通过此方法,可以动态删除指定索引位置的子项。
- addItem():向Repeater添加新的子项。该方法在大多数情况下不常用,因为Repeater通常由绑定的模型动态管理,但在某些特殊情况下,它可以用来动态添加子项。
重要信号
- onItemAdded:当新的子项被添加时,触发该信号。可以用此信号来执行子项创建后的操作,如设置子项的属性或添加额外功能。
- onItemRemoved:当子项被移除时,触发此信号。该信号可以用来清理子项的相关资源或做其他必要的处理。
- onCountChanged:当count属性的值发生变化时,触发此信号。这通常用于监听模型数据的变化或动态调整重复项的数量。
- onModelChanged:当model属性发生变化时,触发此信号。通常用于在绑定到模型时,监听模型数据的更新。
常用枚举类型
- Qt.Alignment:用于指定子项对齐方式的枚举类型。常用值有:
- Qt.AlignLeft:左对齐
- Qt.AlignRight:右对齐
- Qt.AlignTop:顶部对齐
- Qt.AlignBottom:底部对齐
- Qt.AlignCenter:居中对齐
下面是一个具体的代码示例:
Window {
visible: true
width: 640
height: 480
title: "Repeater 示例"
// 数据模型
ListModel {
id: colorModel
ListElement { color: "red"; name: "红色" }
ListElement { color: "green"; name: "绿色" }
ListElement { color: "blue"; name: "蓝色" }
ListElement { color: "yellow"; name: "黄色" }
ListElement { color: "purple"; name: "紫色" }
}
Column {
id: columnLayout
anchors.centerIn: parent
spacing: 20
padding: 20
width: 300
height: 400
visible: true
enabled: true
clip: true
Repeater {
id: repeater
model: colorModel
delegate: Rectangle {
width: parent.width
height: 50
color: model.color
border.color: "black"
border.width: 1
Text {
text: model.name
anchors.centerIn: parent
color: "white"
}
MouseArea {
anchors.fill: parent
onClicked: {
console.log("点击了 " + model.name)
}
}
}
onCountChanged: {
console.log("生成的子项数量发生变化: " + count)
}
}
}
Rectangle {
id: controlRect
width: 150
height: 50
color: "green"
Text {
text: "点击添加颜色"
anchors.centerIn: parent
color: "white"
}
MouseArea {
anchors.fill: parent
onClicked: {
colorModel.append({ color: "orange", name: "橙色" })
}
}
}
Rectangle {
id: removeControlRect
width: 150
height: 50
color: "red"
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: controlRect.bottom
anchors.margins: 10
Text {
text: "点击移除颜色"
anchors.centerIn: parent
color: "white"
}
MouseArea {
anchors.fill: parent
onClicked: {
if (colorModel.count > 0) {
colorModel.remove(0)
}
}
}
}
}
热门推荐
GCC编译黑科技揭秘:从预处理到链接全过程
苯丙氨酯片:治疗轻中度抑郁症的有效药物
苯丙氨酯片是什么
征途怀旧版赤兔马铠:防御生命双加成,打造升级全攻略
征途赤兔马铠打造攻略:12%成功率提升技巧
花甲之年收到“时光之书”:小明DIY纪念册感动妈妈
从简短大气到创意独特,这些生日祝福语妈妈一定会喜欢
孩子给妈妈的生日祝福:从童言无忌到深情告白
珠江现40厘米罗氏沼虾,专家:生态影响有限,养殖前景广阔
罗氏沼虾:50厘米巨型淡水虾的养殖与美食全攻略
如何合理使用医保账户里的钱?这些钱的使用有哪些限制?
原来泳衣可以这样搭!10种比基尼穿搭图鉴一次看,多加一件单品让沙滩造型更时髦
全屋定制合同纠纷频发,教你如何规避风险
浙江省消保委教你应对全屋定制合同纠纷
2024年欧元贬值3%,高盛预测2025年将跌至1:1平价
周末DIY家常面条,你最爱哪种?
手擀面DIY挑战赛:谁是厨艺王者?
避开黄果树瀑布人潮,这5个特色景点值得一去
胡海牙:当代道教养生大家的修仙养生法
头痛分两类:无害和有害,这样区分和治疗
摆脱后脑勺疼痛:颈椎病等4大病因及科学缓解方案
南宁站到南宁东站怎么去?最快20分钟,多种交通方式详解
业之峰全屋定制纠纷:消费者如何维权?
临湘法院教你如何处理全屋定制纠纷
西固法院教你应对全屋定制合同纠纷:从案例到维权指南
8%气血加成!天地劫赤霞玉戒获取攻略与实战应用详解
苯丙氨酯片使用指南:从用药到饮食调理全解析
阿司匹林的正确服用时间:饭前还是饭后,早晨还是睡前?
水泥地可以种草坪吗?——从可行性到具体实施的完整指南
住宅区绿化率及房屋楼顶绿化现状与政策解读