Тип QML DelegateModel
Инкапсулирует модель и делегат Подробнее...
| Оператор импорта: | import QtQml.Models 2.2 |
Свойства
- count : int
- delegate : Component
- filterOnGroup : string
- groups : list<DelegateModelGroup>
- items : DelegateModelGroup
- model : model
- parts : object
- persistedItems : DelegateModelGroup
- rootIndex : QModelIndex
Присоединенные свойства
- groups : stringlist
- 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 : string
Это свойство содержит имя группы, используемой для фильтрации визуальной модели данных.
Только элементы, принадлежащие этой группе, видны представлению.
По умолчанию это группа items.
groups : list<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 : stringlist
Это присоединенное свойство содержит имена 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/qt-5.9/qml-qtqml-models-delegatemodel.html