Тип 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