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


    1.概述

    Repeater类型用于创建大量的类似项目。像其他视图类型一样,Repeater有一个模型和一个委托:对于模型中的每个条目,委托被实例化在一个用模型中的数据播种的环境中。重复器项目通常被包围在一个定位器类型中,如行或列,以直观地定位由重复器创建的多个委托项目。
    下面的重复器在一个行中创建了三个矩形项的实例:

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

     


    重复器的模型可以是任何支持的数据模型。此外,像其他视图的委托一样,重复器的委托可以访问它在重复器中的索引,以及与委托相关的模型数据。详情请参见委托属性文档。

    重复器实例化的项目按顺序插入,作为重复器父节点的子节点。插入工作紧随重复器在其父级堆叠列表中的位置之后开始。这使得重复器可以在布局内使用。例如,以下重复器的项目被堆叠在一个红色矩形和一个蓝色矩形之间。

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


    注意:一个重复器项目拥有它实例化的所有项目。删除或动态销毁一个由重复器创建的项目会导致不可预测的行为。


    2.使用Repeater时的考虑因素

    重复器类型在首次创建重复器时创建了所有的委托项目。如果有大量的委托项目,并且不是所有的项目都需要同时可见,那么这可能是低效的。如果是这种情况,可以考虑使用其他视图类型,比如ListView(它只在滚动进入视图时创建委托项目),或者使用动态对象创建方法,在需要时创建项目。

    另外,请注意Repeater是基于Item的,只能重复项目派生的对象。例如,它不能被用来重复QtObjects:

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

    3.属性介绍

    count : int

    此属性持有模型中的项目数。


    注意:如果重复器在实例化委托的过程中或设置不正确,由count报告的模型中的项目数可能与创建的委托数不同。

    [default] delegate : Component

    委托提供一个模板,定义重复器实例化的每个项目。
    委托被暴露在一个只读的索引属性中,该属性指示重复器中委托的索引。例如,下面的文本委托显示每个重复项目的索引:


    如果模型是一个字符串列表或对象列表,该委托也被暴露给一个只读的modelData属性,该属性持有字符串或对象数据。比如说:

     

     

    如果模型是一个模型对象(如ListModel),委托人可以以命名属性的方式访问所有的模型角色,就像委托人对ListView等视图类的访问一样。
    参见QML数据模型。

    model : any
    为重复器提供数据的模型。
    这个属性可以被设置为任何一个支持的数据模型:

    • A number that indicates the number of delegates to be created by the repeater
    • A model (e.g. a ListModel item, or a QAbstractItemModel subclass)
    • A string list
    • An object list

    模型的类型会影响到暴露给委托的属性。
    参见数据模型。


    4.信号介绍

    itemAdded(int index, Item item)

    当一个项目被添加到重复器中时,这个信号就会被发射出来。index参数表示项目在重复器中被插入的索引,item参数表示被添加的项目。
    相应的处理程序是onItemAdded。

    itemRemoved(int index, Item item)

    当一个项目从重复器中被移除时,这个信号就会被发出。index参数持有项目从重复器中删除的索引,item参数持有被删除的项目。
    如果item是由该重复器创建的,则不要保留对item的引用,因为在这些情况下,在信号被处理后不久,它就会被删除。
    相应的处理程序是onItemRemoved。


    5.方法介绍

    Item itemAt(index)
    返回在给定索引处创建的项目,如果索引处不存在项目,则返回空。


     

  • 相关阅读:
    Kubernetes实战(一)-二进制部署Kubernetes集群
    关于 Tomcat 启动时,解决控制台输出日志乱码问题的方案
    【韩老师零基础30天学会Java 02】学会 2种冒泡排序 和 2种二分查找 递归与非递归
    《红楼梦》诗词大全
    XS9922A,XS9922B四路模拟高清方案
    Egg 1. 快速开始 Quick Start 1.3 一步步 Step by Step 1.3.3 添加静态资源 & 1.3.4 添加渲染模板
    python函数的定义和使用
    si9000 单端(线)&差分(动)线板层结构与阻抗计算
    Mysql 分布式序列算法
    Redis之Lua脚本
  • 原文地址:https://blog.csdn.net/jolin678/article/details/126760485