Spec-Zone.ru › Qt 5.14

Тип QML Repeater

Инициализирует несколько компонентов на основе Item, используя предоставленную модель. Подробнее...

Заявление об импорте: import QtQuick 2.14
Наследуется от:

Item

  • Список всех членов, включая унаследованные члены

Свойства

  • count : int
  • delegate : Component
  • model : any

Сигналы

  • itemAdded(index, Item item)
  • itemRemoved(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 находится в процессе инициализации делегатов или настроен неправильно.

[по умолчанию] 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(index, Item item)

Этот сигнал генерируется, когда элемент добавляется в repeater. Параметр index содержит индекс, в котором был вставлен элемент в repeater, а параметр item содержит добавленный Item.

Соответствующий обработчик — onItemAdded.

itemRemoved(index, Item item)

Этот сигнал генерируется, когда элемент удаляется из repeater. Параметр index содержит индекс, из которого был удалён элемент в repeater, а параметр item содержит удалённый Item.

Не храните ссылку на item, если он был создан этим repeater, так как в этих случаях он будет удалён вскоре после обработки сигнала.

END_OF_DOCUMENT_MARKER

Соответствующий обработчик — onItemRemoved.

Документация по методам

Элемент itemAt(индекс)

Возвращает Элемент, созданный по указанному индексу, или null если элемента по индексу не существует.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qml-qtquick-repeater.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API