Тип QML DelegateModel
Инкапсулирует модель и делегат. Подробнее...
| Заявление об импорте: | import QtQml.Models 2.13 |
Свойства
- 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 : модель
- persistedItemsIndex : int
Методы
- QModelIndex modelIndex(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 : строка
Это свойство содержит имя группы, используемой для фильтрации модели делегата.
Только элементы, принадлежащие этой группе, будут видимы для представления.
По умолчанию это группа 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 или 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.
Изменение этого свойства добавит или удалит элемент из группы. Будьте осторожны при изменении, так как удаление элемента из группы persistedItems уничтожит текущий экземпляр, если он не ссылается на модель.
Присоединено к каждому экземпляру делегата.
DelegateModel.isUnresolved : bool
Это присоединённое свойство указывает, связан ли визуальный элемент с индексом модели данных. Возвращает true, если элемент не связан с моделью, и false, если он связан.
Неразрешённый элемент можно связать с моделью данных, используя функцию DelegateModelGroup::resolve().
Присоединено к каждому экземпляру делегата.
DelegateModel.itemsIndex : int
Это присоединённое свойство содержит индекс элемента в стандартной группе items DelegateModelGroup.
Оно присоединено к каждому экземпляру делегата.
DelegateModel.model : model
Это присоединённое свойство содержит модель данных, к которой относится этот экземпляр делегата.
Оно присоединено к каждому экземпляру делегата.
DelegateModel.persistedItemsIndex : int
Это присоединённое свойство содержит индекс элемента в группе persistedItems DelegateModelGroup.
Оно присоединено к каждому экземпляру делегата.
Документация методов
QModelIndex modelIndex(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-5.13/qml-qtqml-models-delegatemodel.html