Тип QML Repeater
Инициализирует несколько компонентов на основе Item с помощью предоставленной модели. Подробнее...
| Заявление об импорте: | import QtQuick |
| Наследует: |
Свойства
Сигналы
- itemAdded(int index, Item item)
- itemRemoved(int index, Item item)
Методы
- Item itemAt(index)
Подробное описание
Тип Repeater используется для создания большого количества похожих элементов. Как и другие типы представлений, Repeater имеет model и delegate: для каждой записи в модели делегат создается в контексте, заполненном данными из модели. Элемент Repeater обычно заключен в тип позиционера, такой как Row или Column, чтобы визуально разместить несколько элементов делегата, созданных Repeater.
Следующий Repeater создает три экземпляра элемента Rectangle внутри Row:
import QtQuick 2.0
Row {
Repeater {
model: 3
Rectangle {
width: 100; height: 40
border.width: 1
color: "yellow"
}
}
} Модель model Repeater может быть любой из поддерживаемых моделей данных. Кроме того, как и делегаты для других представлений, делегат Repeater может получить доступ к своему индексу в Repeater, а также к данным модели, относящимся к делегату. Подробнее см. в документации свойства delegate.
Элементы, инициализированные Repeater, вставляются в порядке следования в качестве дочерних элементов родительского элемента Repeater. Вставка начинается сразу после позиции Repeater в списке стекирования родительского элемента. Это позволяет использовать Repeater внутри макета. Например, элементы следующего Repeater размещаются между красным прямоугольником и синим прямоугольником:
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
Тип Repeater создаёт все свои элементы делегата при первом создании Repeater. Это может быть неэффективно, если количество элементов делегата велико, и не все элементы необходимы для отображения одновременно. В этом случае рассмотрите использование других типов представлений, таких как ListView (который создаёт элементы делегата только при прокрутке в область видимости) или используйте методы Динамического создания объектов, чтобы создавать элементы по мере необходимости.
Также обратите внимание, что Repeater основан на Item и может повторять только объекты, производные от Item. Например, он не может использоваться для повторения QtObjects:
// bad code:
Item {
// Can't repeat QtObject as it doesn't derive from Item.
Repeater {
model: 10
QtObject {}
}
} Документация по свойствам
count : int
Это свойство содержит количество элементов в модели.
Примечание: Количество элементов в модели, как сообщается свойством count, может отличаться от количества созданных делегатов, если Repeater находится в процессе инициализации делегатов или настроен неправильно.
[по умолчанию] delegate : Component
Делегат предоставляет шаблон, определяющий каждый элемент, инициализированный Repeater.
Делегаты имеют доступ к только для чтения свойству index , которое указывает индекс делегата в Repeater. Например, следующий делегат Text отображает индекс каждого повторяющегося элемента:
Column {
Repeater {
model: 10
Text { text: "I'm item " + index }
}
} |
Если model представляет собой список строк или список объектов, делегат также имеет доступ к свойству modelData только для чтения, которое содержит данные строки или объекта. Например:
Column {
Repeater {
model: ["apples", "oranges", "pears"]
Text { text: "Data: " + modelData }
}
} |
Если model является объектом модели (например, ListModel), делегат может получить доступ ко всем ролям модели в качестве именованных свойств, так же, как и делегаты для классов представлений, таких как ListView.
См. также QML Модели данных.
model : any
Модель, предоставляющая данные для Repeater.
Это свойство может быть установлено на любую из поддерживаемых моделей данных:
- Число, указывающее количество делегатов, которые должны быть созданы Repeater
- Модель (например, элемент ListModel или подкласс QAbstractItemModel)
- Список строк
- Список объектов
Тип модели влияет на свойства, которые доступны делегату delegate.
См. также Модели данных.
Документация по сигналам
itemAdded(int index, Item item)
Этот сигнал генерируется при добавлении элемента в Repeater. Параметр index содержит индекс, в который был вставлен элемент в Repeater, а параметр item содержит добавленный Item.
Примечание: Соответствующий обработчик — onItemAdded.
itemRemoved(int index, Item item)
Этот сигнал генерируется при удалении элемента из Repeater. Параметр index содержит индекс, из которого был удалён элемент из Repeater, а параметр item содержит удалённый Item.
Не храните ссылку на item, если он был создан этим Repeater, так как в этих случаях он будет удалён вскоре после обработки сигнала.
Примечание: Соответствующий обработчик — onItemRemoved.
Документация по методам
Item itemAt(index)
Возвращает Item, созданный по заданному индексу, или null, если элемент по индексу отсутствует.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qml-qtquick-repeater.html