DelegateModel QML 类型
封装一个模型和代理。 更多信息...
导入语句 | import QtQml.Models |
属性
- count : int
- delegate : Component
- filterOnGroup : string
- groups : list<DelegateModelGroup>
- items : DelegateModelGroup
- model : model
- parts : object
- persistedItems : DelegateModelGroup
- rootIndex : QModelIndex
附加属性
- groups : stringlist
- inItems : bool
- inPersistedItems : bool
- isUnresolved : bool
- itemsIndex : int
- model : model
- persistedItemsIndex : int
方法
- QModelIndex modelIndex(int index)
- QModelIndex parentModelIndex()
详细描述
DelegateModel 类型封装了一个模型以及将被实例化的代理。
通常不需要创建 DelegateModel。但是,当使用 QAbstractItemModel 的子类作为模型时,它可以用来操作和访问 modelIndex。另外,DelegateModel 也可以与 Package 一起使用,为多个视图提供代理,并与 DelegateModelGroup 一起使用以排序和过滤代理项目。
DelegateModel 仅支持一维模型——将表模型分配给 DelegateModel 和表视图将只能显示一列。
下面的示例演示了如何使用 DelegateModel 和 ListView。
import QtQuick import QtQml.Models 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 |
委托 : 组件 |
委托提供了一系列模板,用于定义视图实例化的每个项目。索引作为一个可访问的 index
属性暴露。根据数据模型类型,模型属性也可用。
此属性持有委托模型中的组定义。
组定义了委托模型中项的子集,可用于过滤模型。
对于在 DelegateModel 中定义的每个组,都将为每个委托项添加两个附加的伪属性。第一个以 DelegateModel.inGroupName 的形式存在,表示项目是否属于该组;第二个 DelegateModel.groupNameIndex 持有项目在该组中的索引。
以下示例说明了如何使用组选择模型中的项。
import QtQuick import QtQml.Models 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 } }
警告:与正常附加属性不同,这些属性不能以声明性方式设置。以下将导致错误
delegate: Rectangle { DelegateModel.inSelected: true }
items : 委托模型组 |
此属性持有所有新项都添加到的默认组。
model : 模型 |
此属性持有为 DelegateModel 提供数据的模型。
模型提供用于为视图创建项的数据集。对于大型或动态数据集,模型通常由 C++ 模型对象提供。C++ 模型对象必须是 QAbstractItemModel 子类或简单列表。
模型也可以直接在 QML 中创建,例如使用 ListModel。
另请参阅 数据模型。
parts : 对象 |
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 import QtQml.Models 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 : stringlist |
此附加属性保存属于DelegateModelGroups的项的名称。
它附加到每个委托实例。
DelegateModel.inItems : bool |
DelegateModel.inPersistedItems : bool |
此附加属性保存项是否属于
更改此属性会将项添加到或从items组中移除。注意,从
它附加到每个委托实例。
DelegateModel.isUnresolved : bool |
此附加属性指示可视化项是否绑定到数据模型索引。如果没有绑定到模型,则返回true,绑定到模型则返回false。
未解决的项可以使用DelegateModelGroup::resolve()函数绑定到数据模型。
它附加到每个委托实例。
DelegateModel.itemsIndex : int |
此附加属性保存项在默认items属性DelegateModelGroup中的索引。
它附加到每个委托实例。
DelegateModel.model : model |
此附加属性保存此委托实例所属的数据模型。
它附加到每个委托实例。
DelegateModel.persistedItemsIndex : int |
此附加属性保存项在persistedItems属性中的索引。
它附加到每个委托实例。
方法文档
QModelIndex modelIndex(int index) |
QAbstractItemModel提供了数据分层树结构,而QML仅操作列表数据。此函数协助在QML中使用树型模型。
返回指定索引的 QModelIndex。此值可以分配给 rootIndex。
另请参阅 rootIndex。
QModelIndex parentModelIndex() |
QAbstractItemModel提供了数据分层树结构,而QML仅操作列表数据。此函数协助在QML中使用树型模型。
返回当前 rootIndex 的父级 QModelIndex。此值可以分配给 rootIndex。
另请参阅 rootIndex。
© 2024 Qt 公司 Ltd. 本文件中的文档贡献内容均为各自所有者的版权。本文件提供的文档遵循 GNU 自由文档许可1.3版 的条款,由自由软件基金会发布。Qt 和相关标志是芬兰和/或世界其他地区的 Qt 公司 Ltd 的 商标。所有其他商标均为其各自所有者的财产。