Spec-Zone.ru › Qt 6.1

Тип QML DelegateModel

Инкапсулирует модель и делегат. Подробнее...

Заявление об импорте: import QtQml.Models 2.1
  • Список всех членов, включая унаследованные

Свойства

  • count : int
  • delegate : Component
  • filterOnGroup : string
  • groups : list<DelegateModelGroup>
  • items : DelegateModelGroup
  • model : model
  • parts : object
  • persistedItems : DelegateModelGroup
  • rootIndex : QModelIndex

Присоединенные свойства

  • groups : stringlist
  • inItems : bool
  • inPersistedItems : bool
  • isUnresolved : bool
  • itemsIndex : int
  • model : model
  • persistedItemsIndex : int

Методы

  • QModelIndex modelIndex(int index)
  • QModelIndex parentModelIndex()

Подробное описание

Тип DelegateModel инкапсулирует модель и делегат, который будет создан для элементов в модели.

Обычно нет необходимости создавать DelegateModel. Однако это может быть полезно для управления и доступа к modelIndex, когда в качестве модели используется подкласс QAbstractItemModel. Кроме того, DelegateModel используется вместе с Package для предоставления делегатов нескольким представлениям и с DelegateModelGroup для сортировки и фильтрации элементов делегата.

Следующий пример демонстрирует использование DelegateModel с ListView.

import QtQuick 2.0
import QtQml.Models 2.2

Rectangle {
    width: 200; height: 100

    DelegateModel {
        id: visualModel
        model: ListModel {
            ListElement { name: "Apple" }
            ListElement { name: "Orange" }
        }
        delegate: Rectangle {
            height: 25
            width: 100
            Text { text: "Name: " + name}
        }
    }

    ListView {
        anchors.fill: parent
        model: visualModel
    }
}

Документация по свойствам

count : int

delegate : Component

Делегат предоставляет шаблон, определяющий каждый элемент, созданный представлением. Индекс представлен как доступное index свойство. Свойства модели также доступны в зависимости от типа модели данных.

filterOnGroup : string

Это свойство содержит имя группы, используемой для фильтрации модели делегата.

Только элементы, принадлежащие этой группе, отображаются в представлении.

По умолчанию это группа items.

groups : list<DelegateModelGroup>

Это свойство содержит определения групп модели делегата.

Группы определяют подмножество элементов в модели делегата и могут использоваться для фильтрации модели.

Для каждой группы, определенной в DelegateModel, к каждому элементу делегата добавляются два присоединенных свойства. Первое в форме DelegateModel.inGroupName указывает, принадлежит ли элемент группе, а второе DelegateModel.groupNameIndex содержит индекс элемента в этой группе.

Следующий пример демонстрирует использование групп для выбора элементов в модели.

import QtQuick 2.0
import QtQml.Models 2.2

Rectangle {
    width: 200; height: 100

    DelegateModel {
        id: visualModel
        model: ListModel {
            ListElement { name: "Apple" }
            ListElement { name: "Orange" }
        }

        groups: [
            DelegateModelGroup { name: "selected" }
        ]

        delegate: Rectangle {
            id: item
            height: 25
            width: 200
            Text {
                text: {
                    var text = "Name: " + name
                    if (item.DelegateModel.inSelected)
                        text += " (" + item.DelegateModel.selectedIndex + ")"
                    return text;
                }
            }
            MouseArea {
                anchors.fill: parent
                onClicked: item.DelegateModel.inSelected = !item.DelegateModel.inSelected
            }
        }
    }

    ListView {
        anchors.fill: parent
        model: visualModel
    }
}

items : DelegateModelGroup

Это свойство содержит по умолчанию группу, к которой добавляются все новые элементы.

model : model

Это свойство содержит модель, предоставляющую данные для DelegateModel.

Модель предоставляет набор данных, используемых для создания элементов для представления. Для больших или динамических наборов данных модель обычно предоставляется объектом модели C++. Объект модели C++ должен быть подклассом QAbstractItemModel или простым списком.

Модели также могут создаваться непосредственно в QML, например, с использованием ListModel.

См. также Модели данных.

parts : object

Свойство parts выбирает DelegateModel, который создает делегаты из части с указанным именем. Это используется в сочетании с типом Package.

Например, следующий код выбирает модель, которая создает делегаты с именем list из Package:

DelegateModel {
    id: visualModel
    delegate: Package {
        Item { Package.name: "list" }
    }
    model: myModel
}

ListView {
    width: 200; height:200
    model: visualModel.parts.list
}

См. также Package.

persistedItems : DelegateModelGroup

Это свойство содержит группу сохраненных элементов модели делегата.

Элементы в этой группе не уничтожаются при освобождении представлением, вместо этого они сохраняются до удаления из группы.

Элемент можно удалить из группы persistedItems, установив свойство DelegateModel.inPersistedItems в false. Если на элемент в данный момент не ссылается представление, он будет уничтожен. Добавление элемента в эту группу не создает новый экземпляр.

Элементы, возвращаемые функцией QtQml.Models::DelegateModelGroup::create(), автоматически добавляются в эту группу.

rootIndex : QModelIndex

QAbstractItemModel предоставляет иерархическое дерево данных, в то время как QML работает только со списовыми данными. rootIndex позволяет предоставить дочерние элементы любого узла в QAbstractItemModel с помощью этой модели.

Это свойство влияет только на модели типа QAbstractItemModel, которые являются иерархическими (например, модель дерева).

Например, вот простой интерактивный обозреватель файловой системы. При щелчке имени каталога свойство rootIndex представления устанавливается в узел QModelIndex нажатого каталога, тем самым обновляя представление для отображения содержимого нового каталога.

main.cpp:

int main(int argc, char ** argv)
{
    QApplication app(argc, argv);

    QQuickView view;

    QFileSystemModel model;
    view.rootContext()->setContextProperty("fileSystemModel", &model);

    view.setSource(QUrl::fromLocalFile("view.qml"));
    view.show();

    return app.exec();
}

view.qml:

import QtQuick 2.0
import QtQml.Models 2.2

ListView {
    id: view
    width: 300
    height: 400

    model: DelegateModel {
        model: fileSystemModel

        delegate: Rectangle {
            width: 200; height: 25
            Text { text: filePath }

            MouseArea {
                anchors.fill: parent
                onClicked: {
                    if (model.hasModelChildren)
                        view.model.rootIndex = view.model.modelIndex(index)
                }
            }
        }
    }
}

Если model является подклассом QAbstractItemModel, делегат также может ссылаться на hasModelChildren свойство (необязательно с префиксом model.), которое указывает, есть ли у элемента модели делегата дочерние узлы.

См. также modelIndex() и parentModelIndex().

Документация по присоединенным свойствам

DelegateModel.groups : stringlist

Это присоединённое свойство содержит имена DelegateModelGroups, к которым принадлежит элемент.

Оно прикреплено к каждому экземпляру делегата.

DelegateModel.inItems : bool

Это присоединённое свойство указывает, принадлежит ли элемент группе по умолчанию items DelegateModelGroup.

Изменение этого свойства добавит или удалит элемент из группы items.

Оно прикреплено к каждому экземпляру делегата.

DelegateModel.inPersistedItems : bool

Это присоединённое свойство указывает, принадлежит ли элемент группе persistedItems DelegateModelGroup.

Изменение этого свойства добавит или удалит элемент из группы items. Будьте осторожны при изменении, так как удаление элемента из группы persistedItems уничтожит текущий экземпляр, если на него не ссылается модель.

Оно прикреплено к каждому экземпляру делегата.

DelegateModel.isUnresolved : bool

Это присоединённое свойство указывает, связан ли визуальный элемент с индексом модели данных. Возвращает true, если элемент не связан с моделью, и false, если связан.

Неразрешённый элемент может быть связан с моделью данных с помощью функции DelegateModelGroup::resolve().

Оно прикреплено к каждому экземпляру делегата.

DelegateModel.itemsIndex : int

Это присоединённое свойство содержит индекс элемента в списке items DelegateModelGroup по умолчанию.

Это свойство прикрепляется к каждому экземпляру делегата.

DelegateModel.model : model

Это присоединённое свойство содержит модель данных, к которой относится этот экземпляр делегата.

Это свойство прикрепляется к каждому экземпляру делегата.

DelegateModel.persistedItemsIndex : int

Это присоединённое свойство содержит индекс элемента в списке persistedItems DelegateModelGroup.

Это свойство прикрепляется к каждому экземпляру делегата.

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

QModelIndex modelIndex(int index)

QAbstractItemModel предоставляет иерархическое дерево данных, в то время как QML работает только со списковыми данными. Эта функция помогает использовать древовидные модели в QML.

Возвращает QModelIndex для указанного индекса. Это значение можно присвоить свойству rootIndex.

См. также rootIndex.

QModelIndex parentModelIndex()

QAbstractItemModel предоставляет иерархическое дерево данных, в то время как QML работает только со списковыми данными. Эта функция помогает использовать древовидные модели в QML.

Возвращает QModelIndex для родительского элемента текущего rootIndex. Это значение можно присвоить свойству rootIndex.

См. также rootIndex.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qml-qtqml-models-delegatemodel.html

Spec-Zone.ru

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