Тип QML Repeater
Создаёт несколько компонентов на основе Item с использованием предоставленной модели. Подробнее...
| Заявление об импорте: | import QtQuick 2.11 |
| Наследует: |
Свойства
Сигналы
- itemAdded(int index, Item item)
- itemRemoved(int index, Item item)
Методы
- Item itemAt(index)
Подробное описание
Тип Repeater используется для создания большого числа похожих элементов. Как и другие типы представлений, Repeater имеет свойство model и delegate: для каждой записи в модели delegate экземпляризируется в контексте, заполненном данными из модели. Элемент Repeater обычно заключён в тип позиционера, такой как Row или Column, чтобы визуально разместить несколько элементов delegate, созданных 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 создаёт все свои элементы delegate при первом создании repeater. Это может быть неэффективно, если количество элементов delegate велико, и не все элементы требуется отображать одновременно. В этом случае рассмотрите использование других типов представлений, таких как ListView (который создаёт элементы delegate только при прокрутке в поле видимости), или используйте методы динамического создания объектов для создания элементов по мере необходимости.
Также обратите внимание, что 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 в процессе экземпляризации делегатов или настроен неправильно.
[default] 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, созданный по указанному index, или null , если элемент по index не существует.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/qml-qtquick-repeater.html