Spec-Zone.ru › Qt 5.6

Тип QML DelegateModel

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

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

Свойства

  • count : int
  • delegate : Component
  • filterOnGroup : строка
  • groups : список<DelegateModelGroup>
  • items : DelegateModelGroup
  • model : модель
  • parts : объект
  • persistedItems : DelegateModelGroup
  • rootIndex : QModelIndex

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

  • groups : список строк
  • inItems : int
  • inPersistedItems : int
  • isUnresolved : bool
  • itemsIndex : int
  • model : int
  • 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
    }
}

Примечание: Этот тип также доступен как VisualDataModel в модуле Qt QML по причинам совместимости.

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

count : int

delegate : Component

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

filterOnGroup : строка

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

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

По умолчанию это группа 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 : model

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

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

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

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

parts : объект

Свойство 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;

    QDirModel model;
    view.rootContext()->setContextProperty("dirModel", &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: dirModel

        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 : int

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

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

Присоединяется к каждой инстанции делегата.

DelegateModel.inPersistedItems : int

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

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

Присоединяется к каждой инстанции делегата.

DelegateModel.isUnresolved : bool

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

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

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

DelegateModel.itemsIndex : int

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

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

DelegateModel.model : int

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

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

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/archives/qt-5.6/qml-qtqml-models-delegatemodel.html

Spec-Zone.ru

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