Тип QML DelegateModel
Инкапсулирует модель и делегат. Подробнее...
| Заявление об импорте: | import QtQml.Models 2.15 |
Свойства
- count : int
- delegate : Component
- filterOnGroup : string
- groups : список<DelegateModelGroup>
- items : DelegateModelGroup
- model : model
- parts : object
- persistedItems : DelegateModelGroup
- rootIndex : QModelIndex
Присоединенные свойства
- groups : список строк
- 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 : список<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 : 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;
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 : 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-5.15/qml-qtqml-models-delegatemodel.html