DelegateModelGroup QML Type
封装了一组经过过滤的视觉数据项。更多...
| Import Statement: | import QtQml.Models |
属性
- count : int
- includeByDefault : bool
- name : string
信号
- changed(array removed, array inserted)
方法
- void addGroups(int index, int count, list<string> groups)
- var create(int index)
- var create(jsdict data, array groups)
- var create(int index, jsdict data, array groups)
- var get(int index)
- void insert(jsdict data, var groups)
- void insert(int index, jsdict data, array groups)
- void move(var from, var to, int count)
- void remove(int index, int count)
- void removeGroups(int index, int count, list<string> groups)
- void resolve(int from, int to)
- void setGroups(int index, int count, list<string> groups)
详细说明
DelegateModelGroup 类型提供了一种处理DelegateModel 中委托项的模型数据的方法,并可用于对这些委托项进行排序和过滤。
DelegateModel 中最初可实例化的委托项集合由其items 组表示,该组通常直接反映分配给DelegateModel::model 的模型内容。可以通过将该DelegateModelGroup的name 赋值给DelegateModel::filterOnGroup 属性,将此集合更改为DelegateModel::groups 中任何其他成员的内容。
可以通过调用get()函数访问DelegateModelGroup中某项的数据,该函数会返回有关组成员资格和索引的信息,以及模型数据。 结合move() 函数,可用于实现视图排序;配合remove() 函数可从视图中过滤项目;或结合setGroups() 函数及Package 委托,将项目分类到不同的视图中。只有当不同组互不相交时,才能独立排序。在一个组中移动项目,也会将其在所属的所有其他组中同步移动。
可以通过使用insert() 函数将数据直接插入 DelegateModelGroup 中,来补充模型中的数据。这可用于在视图中引入模拟项,或放置占位项——当真实模型数据可用时,这些占位项会通过resolved 方法替换为真实模型数据。
还可以通过create()函数直接从DelegateModelGroup中实例化委托项,从而可以在不依赖特定视图类型的情况下使用DelegateModel ,或者有选择地实例化特定项,无论这些项当前是否位于视图的可见区域内。
另请参阅 《QML 动态视图排序教程》。
属性文档
count : int [read-only]
该属性存储组中的项目数量。
includeByDefault : bool
该属性决定了是否默认将新项目分配到该组中。
name : string
该属性存储组的名称。
模型中的每个组都必须有一个以小写字母开头的唯一名称。
Signal 文档
changed(array removed, array inserted)
当从组中移除或向组中插入项目时,会触发此信号。
removed 和inserted 数组中的每个对象都有两个值:第一个被插入或移除项的索引,以及连续插入或移除项的数量。
每个索引都会根据之前的更改进行调整,所有已移除的项目都位于任何已插入的项目之前。
注意: 相应的处理程序 是onChanged 。
方法文档
void addGroups(int index, int count, list<string> groups)
将index 起始的count 条目添加到groups 中。
var create(int index)
var create(int index, jsdict data, array groups = undefined)
var create(jsdict data, array groups = undefined)
返回对该组中位于index 的已实例化项的引用。
create如果提供了data 对象,则该对象将在index 处被设为inserted ,并返回一个引用此新条目的项。可选参数groups 用于指定新条目应所属的组;若未指定,则默认使用调用()时所在的组。
create 方法返回的所有项都会被添加到persistedItems 组中。当该组中的项未被任何视图引用时,它们仍会保持实例化状态。
var get(int index)
返回一个 JavaScript 对象,用于描述该组中位于index 的项目。
返回的对象包含与附加的DelegateModel 中的委托可访问的信息相同的内容,以及该项目的模型。它具有以下属性:
- model该项的模型数据。这与委托中的 modelContext 属性相同
- groups该项目所属组的名称列表。可通过写入该属性来更改项目的组成员身份。
- inItems该项目是否属于items 组。写入此属性将把该项目添加到组中或从组中移除。
- itemsIndex该项在items 组中的索引。
- in<GroupName>表示该项目是否属于动态组groupName。写入此属性将把该项目添加到该组或从该组中移除。
- <groupName>Index该项目在动态组groupName 中的索引。
- isUnresolved该项是否绑定到分配给DelegateModel::model 的模型中的某个索引。若该项未绑定到模型,则返回true;若已绑定,则返回false。
void insert(int index, jsdict data, array groups = undefined)
void insert(jsdict data, var groups = undefined)
在DelegateModel 中的index 下创建一个新条目,其值来自data ,这些值对应于模型中分配给DelegateModel::model 的角色。
如果未提供索引,数据将追加到模型中。
可选参数groups 用于指定新条目应所属的组;如果未指定,则默认与调用 insert 时所在的组相同。
插入到DelegateModel 中的数据,日后可通过resolve()函数与DelegateModel::model 中现有的条目进行合并。这可用于创建占位项,这些占位项日后将被实际数据替换。
void move(var from, var to, int count)
将位于from 的count 移动到组to 中的新位置。
注意: DelegateModel 充当代理模型:它存储的委托顺序与underlying model 中的顺序不同。后续对底层模型的任何更改都不会撤销您通过此函数所做的重新排序操作。
void remove(int index, int count)
从组中删除以index 开头的count 项目。
void removeGroups(int index, int count, list<string> groups)
从groups 中删除以index 开头的count 条目。
void resolve(int from, int to)
将from 中的未解析项与DelegateModel::model 中索引为to 的项进行绑定。
未解析项是指其数据已通过inserted 写入DelegateModelGroup ,而非从DelegateModel::model 索引派生而来的条目。解析一项将用该未解析项替换目标索引处的条目。已解析项将在其绑定索引处反映源模型的数据,并会像其他任何条目一样随该索引的移动而移动。
如果新项在DelegateModelGroup 的onChanged()处理程序中被替换,其插入和替换操作将作为原子操作传达给视图,从而呈现出模型内容未发生变化的效果;或者,如果未解析项与模型项并非相邻,则会呈现出先前未解析项仅仅移动了的效果。
void setGroups(int index, int count, list<string> groups)
更改从index 开始的count 项的组成员资格。这些项将从其现有组中移除,并添加到groups 中。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.