Spec-Zone.ru › Qt 6.0

Тип QML DelegateModel

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

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

Свойства

  • count : int
  • delegate : Component
  • filterOnGroup : string
  • groups : список<DelegateModelGroup>
  • items : DelegateModelGroup
  • model : модель
  • parts : object
  • persistedItems : DelegateModelGroup
  • rootIndex : QModelIndex

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

  • groups : список строк
  • inItems : bool
  • inPersistedItems : bool
  • isUnresolved : bool
  • itemsIndex : int
  • 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 : список<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 : модель

Это свойство содержит модель, предоставляющую данные для 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 : список строк

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

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

DelegateModel.inItems : bool

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

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

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

DelegateModel.inPersistedItems : bool

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

Изменение этого свойства добавит или удалит элемент из группы. Изменяйте с осторожностью, так как удаление элемента из группы 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.0/qml-qtqml-models-delegatemodel.html

Spec-Zone.ru

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