重复器 QML 类型

使用提供的模型实例化多个基于 Item 的组件。 更多...

导入语句import QtQuick
继承

Item

属性

信号

方法

详细描述

重复器类型用于创建大量相似的项目。像其他视图类型一样,重复器有一个模型和一个委托:对于模型中的每个条目,委托都在由模型数据种子的上下文中实例化。重复器项通常在等定位器类型中封装,以在视觉上定位重复器创建的多个委托项。

以下重复器在中创建了三个矩形项的实例

import QtQuick

Row {
    Repeater {
        model: 3
        Rectangle {
            width: 100; height: 40
            border.width: 1
            color: "yellow"
        }
    }
}

重复器的模型可以是支持的任何数据模型。此外,类似于其他视图的委托,重复器委托可以访问它在重复器中的索引以及与委托相关的模型数据。有关详细信息,请参阅委托属性的文档。

重复器实例化的项目按顺序以重复器父项的子项插入。插入从重复器在父项堆叠列表中的位置立即开始。这使得重复器可以在布局中使用。例如,以下重复器的项在红色矩形和蓝色矩形之间堆叠

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" }
}

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

使用重复器的注意事项

重复器类型在第一次创建时会创建所有其代理项。如果代理项数量庞大且不是所有项都需要同时可见,这可能会效率低下。在这种情况下,可以考虑使用其他视图类型,如ListView(仅在项滚动到视图中时创建代理项),或者使用动态对象创建方法在需要时创建项。

另外,请注意,重复器是Item-based的,只能重复Item派生的对象。例如,它不能用于重复 QtObjects

// bad code:
Item {
    // Can't repeat QtObject as it doesn't derive from Item.
    Repeater {
        model: 10
        QtObject {}
    }
}

属性文档

count : int [只读]

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

注意:由count报告的模型中的项数可能与正在实例化代理或设置不正确的重复器创建的代理数不同。


delegate : 组件 [默认]

代理提供由重复器实例化的每个项的模板。

代理公开了只读的index属性,该属性指示代理在重复器中的索引。例如,以下Text代理显示每个重复项的索引

Column {
    Repeater {
        model: 10
        Text {
            required property int index
            text: "I'm item " + index
        }
    }
}

如果model是一个字符串列表对象列表,则代理也公开了只读的modelData属性,其中包含字符串或对象数据。例如

Column {
    Repeater {
        model: ["apples", "oranges", "pears"]
        Text {
            required property string modelData
            text: "Data: " + modelData
        }
    }
}

如果model是一个模型对象(如ListModel),则代理可以访问所有模型角色作为命名属性,这与代理对ListView等视图类的处理方式相同。

另请参阅:QML 数据模型


model : var

为重复器提供数据的模型。

可以将此属性设置为任何支持的数据模型

  • 指示重复器要创建的代理数
  • 模型(例如,一个ListModel项,或一个QAbstractItemModel子类)
  • 字符串列表
  • 对象列表

模型类型会影响公开给delegate的属性。

另请参阅:数据模型


信号文档

itemAdded(int index, Item item)

当项添加到重复器时,会发出此信号。参数index持有项被插入重复器内的索引,而参数item持有被添加的Item

注意:对应的处理程序是onItemAdded


itemRemoved(int index, Item item)

当从重复器中删除项目时,会发出此信号。参数 index 保持项目从重复器中删除的索引,参数 item 保持被删除的 Item 对象。

如果该 item 由该重复器创建,则不要保留对其的引用,因为在这些情况下,它将在信号处理后的短时间内被删除。

注意:相应的处理程序是 onItemRemoved


方法文档

Item itemAt(index)

返回在指定 index 那里创建的 Item,如果在该 index 上不存在项目,则返回 null


© 2024 Qt公司有限公司。此处包含的文档贡献是各自所有者的版权。此处提供的文档是根据由自由软件基金会发布的 GNU自由文档许可证版本1.3 的条款授权的。Qt及其相关标志是芬兰和/或世界其他地区的Qt公司有限公司的商标。所有其他商标均为其各自所有者的财产。