简介

Repeater用于创建大量类似项。与其他视图类型一样,Repeater有一个模型和一个委托:对于模型中的每一项,委托都在一个上下文中实例化。Repeater通常用于在定位器类型(如Row或Column)中,以直观地定位由Repeater创建的多个委托项。

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

使用Repeater时的注意事项
Repeater在第一次创建时会创建其所有委托项。如果存在大量的委托项,并且不是所有的项都需要同时可见,那么这么做效率可能会很低。如果是这种情况,请考虑使用其他视图类型,如ListView(它仅在将委托项滚动到视图中时创建委托项),或者根据需要使用动态对象创建方法来创建委托项。

另外,请注意,Repeater是基于项的,并且只能重复项派生的对象。

model 属性可以取下列值:
数字
字符串列表
对象列表
ListModel 等常见的 model

model 为数字
model 为数字时指示 Repeater 创建特定数量的组件,此时在 delegate 组件内可以访问 index 属性。

简单示例 repeater_number.qml:

import QtQuick 2.2
import QtQuick.Layouts 1.1
Rectangle {width: 400height: 200color: "#EEEEEE"RowLayout {anchors.fill: parentspacing: 4Repeater {model: 8Rectangle {width: 46height: 30color: "steelblue"Text {anchors.fill: parentcolor: "black"font.pointSize: 14verticalAlignment: Text.AlignVCenterhorizontalAlignment: Text.AlignHCentertext: index}}}}
}

model 取值 8,delegate 是内嵌一个 Text 对象的 Rectangle 对象,Text 对象显示索引。我使用 RowLayout 作为 Repeater 的 parent。

model为字符串列表
当使用字符串列表作为 model 时,Repeater 创建的 Item 数量由列表长度决定,在 delegate 内可以通过 modelData 访问字符串对象。

import QtQuick 2.2
import QtQuick.Layouts 1.1
Rectangle {width: 300height: 200color: "#EEEEEE"Row {anchors.centerIn: parentspacing: 8Repeater {model: ["Hello", "Qt", "Quick"]Text {color: "blue"font.pointSize: 18font.bold: trueverticalAlignment: Text.AlignVCenterhorizontalAlignment: Text.AlignHCentertext: modelData}}}
}

这里使用 Row 作为 Repeater 的 parent。delegate 非常简单,就是个 Text 对象。使用 qmlscene 加载 repeater_stringlist.qml

model为对象列表
使用对象列表作为 model 与使用字符串列表类似,只是 modelData 代表 model 中的对象: 直接看 repeater_objects.qml:

import QtQuick 2.2Rectangle {width: 320height: 200color: "#EEEEEE"Column {anchors.fill: parentanchors.margins: 4spacing: 4Repeater {model: [{"name":"Zhang San", "mobile":"13888888888"},{"name":"Wang Er", "mobile":"13999999999"},{"name":"Liu Wu", "mobile":"15866666666"},]Row {height: 30Text{width: 100color: "blue"font.pointSize: 13font.bold: trueverticalAlignment: Text.AlignVCentertext: modelData.name}Text{width: 200font.pointSize: 13verticalAlignment: Text.AlignVCentertext: modelData.mobile}}}}
}

注意,在 delegate 内将 modelData 作为对象使用,直接访问它的属性。

model为ListModel
model 也可以是 ListModel 或者 QAbstractltemModel 的派生类。此时在 delegate 内可以通过 role-name 访问 model 内的数据。

repeaterlistmodel.qml 展示了如何使用 ListModel:

import QtQuick 2.2
Rectangle {width: 300height: 200color: "#EEEEEE"Column {anchors.fill: parentanchors.margins: 4spacing: 4Repeater {model: ListModel {ListElement{name: "MI4"cost: "1999"manufacturer: "Xiaomi"}ListElement{name: "MX4"cost: "1999"manufacturer: "Meizu"}ListElement{name: "iPhone6"cost: "5500"manufacturer: "Apple"}ListElement{name: "C199"cost: "1599"manufacturer: "Huawei"}}Row {height: 30Text{width: 120color: "blue"font.pointSize: 14font.bold: trueverticalAlignment: Text.AlignVCentertext: name}Text{width: 100font.pointSize: 14verticalAlignment: Text.AlignVCentertext: cost}Text{width: 100font.pointSize: 12verticalAlignment: Text.AlignVCentertext: manufacturer}}}}
}

qml之Repeater相关推荐

  1. Roson的Qt之旅 #114 QML Repeater(重复器)

    1.概述 Repeater类型用于创建大量的类似项目.像其他视图类型一样,Repeater有一个模型和一个委托:对于模型中的每个条目,委托被实例化在一个用模型中的数据播种的环境中.重复器项目通常被包围 ...

  2. QML delegate中使用Repeater

    在QML界面设计例如ListView中,通过设计delegate来显示代理model中的数据,在delegate中使用属性绑定的方式将model中对象的值显示出来,但如果delegate中使用了Rep ...

  3. Qt QML 菜单/目录/工具栏的全面攻略(TabBar、MenuBar、ToolBar、Button定制、Listview、Repeater)

    Qt QML 菜单/目录/工具栏的全面攻略 1. TabBar的工具栏/目录 1.1 演示 1.2 关键控件 1.3 源码 2 MenuBar 菜单 2.1 演示 2.2 关键控件 2.3 源码 3 ...

  4. QML Repeater

    QML Repeater 中继器 参考视频:https://www.bilibili.com/video/BV1Ay4y1W7xd 参考:https://doc.qt.io/qt-5/qml-qtqu ...

  5. QML类型:Repeater

    一.描述 Repeater 类型用于创建大量相似的项目.是一种视图元素.与其他视图类型一样,Repeater 有一个模型和一个委托. Repeater 项通常包含在定位器类型中,例如 Row 或 Co ...

  6. Qml学习笔记-Repeater的基本使用

    程序运行截图如下: 代码如下: Window {visible: truewidth: 150height: 500title: qsTr("RepeaterDemo")Colum ...

  7. QML(02)——重复性组件Repeater

    实现效果 //UnsoundRow.qmlimport QtQuick 2.0Item {id: unsoundRowproperty string activeOption: "生芽粒&q ...

  8. qml基础学习 基础概念

    一.概括 学习qt已有2年多的时间,从qt4.7开始使用直到现在正在使用的qt5.6,基本都在windows机器上做开发.最近有意向看了下qt的qml部分,觉着还是挺不错的,毕竟可以做嵌入式移动端产品 ...

  9. 2.QML组件、图像几何变换和元素定位器

    一.组件 组件是可重用的元素,QML提供了不同的方式来创建组件. 最简单的组件是基于文件的组件. 通过在文件中放置QML元素并为该文件指定元素名称(例如Button.qml)来创建基于文件的组件. 然 ...

最新文章

  1. 我的第一个用Hibernate框架写的小例子
  2. Django(补充CBV,FBV)
  3. 线性代数-矩阵-转置 C和C++的实现
  4. 给博客或站点加入百度统计
  5. Linux三剑客之grep 与 egrep
  6. html怎么修改锚点的属性,在HTML中设置自定义锚点
  7. java 类 解析_Java集合类解析 ***
  8. Linux select 一网打尽
  9. c++ vs2015 播放音乐_Linux 中的十大开源视频播放器
  10. springboot转发http请求_Spring Boot2 系列教程(八)Spring Boot 中配置 Https
  11. cuda11.0 cudnn 11.0 torch1.7.1+cu110 torchvision 0.8.2+cu110 安装包
  12. 检测多边形是否重叠_只要保留定位感知通道,目标检测模型也能剪枝70%参数
  13. 使用 JavaScript File API 实现文件上传
  14. 一个创建 docker java jar项目案例 docker-sentinel
  15. python 进化树_7款物种分类(进化树地位)信息检索工具使用方法
  16. CRM系统与呼叫中心系统对接
  17. 什么是架构师?Java架构师一般多少年薪呢?
  18. 中国***传说:游走在黑暗中的精灵
  19. 关于百度云订阅无法正常查看订阅者分享的解决办法
  20. 跑步减肥的正确姿势与方法 不再担心女生跑步腿会变粗

热门文章

  1. Java多态和实现接口的类的对象赋值给接口引用的方法
  2. netty系列之:netty对http2消息的封装
  3. 欧几里得算法求两个正整数的最大公约数
  4. 11.2、SR基本原理
  5. 淘宝店铺层级划分规则是什么?如何去玩转?
  6. 联想拯救者Y7000P装win10与Ubuntu18.04双系统
  7. 【YOLOv5】LabVIEW+YOLOv5快速实现实时物体识别(Object Detection)含源码
  8. out了吧,这份最新阿里、腾讯、华为、字节跳动等大厂的薪资和职级对比,你都没看过?
  9. 泛函分析笔记(十三) 傅里叶级数、紧自伴算子
  10. 金蝶采购模块退货业务标准流程