- class QAbstractItemModel#
- QAbstractItemModel类为项目模型类提供了一个抽象接口。 更多…- 继承自: - QFileSystemModel、- QAbstractItemModelReplica、- QPdfBookmarkModel、- QHelpContentModel、- QStandardItemModel、- QConcatenateTablesProxyModel、- QAbstractTableModel、- QSqlQueryModel、- QSqlTableModel、- QSqlRelationalTableModel、- QAbstractProxyModel、- QTransposeProxyModel、- QSortFilterProxyModel、- QIdentityProxyModel、- QAbstractListModel、- QWebEngineHistoryModel、- QPdfSearchModel、- QPdfLinkModel、- QStringListModel、- QHelpIndexModel- 概述#- 方法#
- 定义 - checkIndex()
- 定义 - decodeData()
- 定义 - encodeData()
- 定义 - hasIndex()
- 定义 - insertRow()
- def - 移动列()
- def - 移动行()
- def - 持久索引列表()
- def - 移除列()
- def - 移除行()
 - 虚方法#- def - 获取伙伴()
- def - 支持拖放数据?
- def - 可以更快地获取数据
- def - 清除项数据()
- def - 列数()
- def - 获取数据()
- def - 拖放数据()
- def - 获取更多数据()
- def - 获取标志位()
- def - 是否存在子项?
- def - 头部数据()
- def - 索引()
- def - 插入列()
- def - 插入行()
- def - 项数据()
- def - 匹配数据()
- 定义 - mimeData()
- 定义 - mimeTypes()
- 定义 - moveRows()
- 定义 - parent()
- 定义 - removeRows()
- 定义 - revert()
- 定义 - roleNames()
- 定义 - rowCount()
- 定义 - setData()
- 定义 - sibling()
- 定义 - sort()
- 定义 - span()
- 定义 - submit()
 - 信号#
- 定义 - modelReset()
- 定义 - rowsMoved()
 - 注意 - 本文档可能包含从 C++ 自动翻译到 Python 的片段。我们始终欢迎对片段翻译的贡献。如果您发现翻译问题,也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 上创建工单来通知我们。 - 详细描述#- QAbstractItemModel类定义了项目模型必须使用的标准接口,以与其他模型/视图架构中的组件进行交互。它不应直接实例化。相反,您应该创建子类来创建新的模型。- QAbstractItemModel类是模型/视图类之一,是 Qt 模型/视图框架的一部分。它可以作为 QML 中项目视图组件或 Qt Widgets 模块中项目视图类的底层数据模型。- 如果您需要与项目视图(如QML的ListView元素或C++小部件QListView或QTableView)一起使用的模型,您应考虑继承自 - QAbstractListModel或- QAbstractTableModel而不是这个类。- 底层数据模型作为表层次结构暴露给视图和代理。如果您不使用这个层次结构,那么模型就是一个简单的行和列的表格。每个数据项都有一个由 - QModelIndex指定的唯一索引。  - 可以通过模型访问的每个数据项都有一个关联的模型索引。您可以使用 - index()函数来获取此模型索引。每个索引可能有一个- sibling()索引;子项有一个- parent()索引。- 可以通过模型索引访问每个数据项的数据,可以使用 - index()函数来获取。每个索引可能有一个- sibling()索引;子项有一个- parent()索引。- 每个项都有一组与之关联的数据元素,可以通过指定一个角色(见 - ItemDataRole)和模型的- data()函数来检索。可以使用- itemData()函数同时获取所有可用角色的数据。- 可以使用 - flags()(见- ItemFlag)查询项,以查看它们是否可以被选择、拖动或以其他方式操作。- 如果一项有子对象, - hasChildren()将返回对应索引的- true。- 该模型具有一个 - rowCount()和一个- columnCount(),用于表示层次结构中的每个级别。可以通过- insertRows()、- insertColumns()、- removeRows()和- removeColumns()来插入和删除行和列。- 模型会发出信号以指示更改。例如,每当模型提供的数据项发生变化时,都会发出 - dataChanged()。对模型提供的表头所做的更改会导致- headerDataChanged()的发出。如果底层数据结构发生变化,模型可以发出- layoutChanged()来指示任何附加视图应重新显示任何显示的项,同时考虑新的结构。- 可以通过 - match()函数在通过模型提供的数据项中搜索特定数据。- 要排序模型,可以使用 - sort()。- 子类化#- 注意 - 模型子类化的某些一般性指南可在模型子类化参考中找到。 - 在子类化 - QAbstractItemModel时,至少必须实现- index()、- parent()、- rowCount()、- columnCount()和- data()。这些函数在所有只读模型中使用,并构成了可编辑模型的基础。- 您还可以重新实现 - hasChildren()方法,为那些- rowCount()实现昂贵的模型提供特殊行为。这使得模型可以限制视图请求的数据量,并可以作为实现模型数据延迟Population的方法。- 要启用模型中的编辑功能,还必须实现 - setData(),并且重新实现- flags()确保返回- ItemIsEditable。您还可以重新实现- headerData()和- setHeaderData()以控制模型头部的显示方式。- 在重新实现 - setData()和- setHeaderData()函数时,必须显式发出- dataChanged()和- headerDataChanged()信号。- 自定义模型需要为其他组件创建模型索引。为此,请使用适当的行和列数以及标识符调用 - createIndex(),标识符可以是指针或整数值。这些值的组合必须对每个项都是唯一的。自定义模型通常在其他重新实现的函数中使用这些唯一标识符来检索项目数据以及访问项的父项和子项的相关信息。有关唯一标识符的更多信息,请参阅简单树模型示例。- 不需要支持在 - ItemDataRole中定义的每个角色。根据模型中包含的数据类型,可能仅需要实现- data()函数来返回对一些常用角色有效的信息。大多数模型至少为- DisplayRole提供项目数据的文本表示,行为良好的模型还应该为- ToolTipRole和- WhatsThisRole提供有效信息。支持这些角色可以使用模型与标准的 Qt 视图一起使用。然而,对于处理高度专业数据的一些模型,可能仅为用户定义的角色提供数据是合适的。- 提供可调整大小数据结构接口的模型可以提供 - insertRows()、- removeRows()、- insertColumns()和- removeColumns()的实现。在实现这些函数时,重要的是在它们发生之前和之后都通知任何连接的视图模型尺寸的变化- insertRows()的实现必须在将新行插入到数据结构之前调用- beginInsertRows(),并在之后立即调用- endInsertRows()。
- insertColumns()的实现必须在将新列插入到数据结构之前调用- beginInsertColumns(),并在之后立即调用- endInsertColumns()。
- removeRows()的实现必须在从数据结构中删除行之前调用- beginRemoveRows(),并在之后立即调用- endRemoveRows()。
- 《removeColumns()`》方法的实现必须在从数据结构中删除列之前调用 ` - beginRemoveColumns()`,之后立即调用 `- endRemoveColumns()`。
 - 这些函数发出的/private信号在数据变得不可用之前给予附加组件采取行动的机会。使用这些begin和end函数对插入和删除操作进行封装,也使得模型能够正确管理 - 持久模型索引。**要正确处理选择,您必须确保调用这些函数**。如果您插入或删除带有子项的项目,则不需要为子项调用这些函数。换句话说,父项将处理其子项。 - 要创建逐步填充的模型,您可以重新实现 - fetchMore()和- canFetchMore()。如果- fetchMore()的重实现向模型添加了行,则必须调用- beginInsertRows()和- endInsertRows()。- 线程安全性- 作为QObject的子类, - QAbstractItemModel不是 thread-safe。任何与- QAbstractItemModel模型相关的 API 应仅从模型对象所在的线程中调用。如果- QAbstractItemModel与视图相关联,这意味着 GUI 线程,因为视图位于该线程中,并且它将从 GUI 线程调用模型。使用后台线程填充或修改模型的内屏是可能的,但需要小心,因为后台线程不能直接调用任何与模型相关的 API。相反,您应该将更新排队并在主线程中应用。这可以通过排队连接来完成。- 另请参阅 - QModelIndex、- QAbstractItemViewUsing、- drag and drop与- item viewsSimple Tree Model ExampleEditable Tree Model ExampleFetch More Example- class LayoutChangeHint#
- 此枚举描述了模型改变布局的方式。 - 常量 - 描述 - QAbstractItemModel.NoLayoutChangeHint - 没有可用的提示。 - QAbstractItemModel.VerticalSortHint - 正在对行进行排序。 - QAbstractItemModel.HorizontalSortHint - 正在对列进行排序。 - 请注意,VerticalSortHint和HorizontalSortHint的含义是在同一父项内移动项目,而不是在模型中移动到不同的父项,也不是过滤或包括在内。 
 - class CheckIndexOption#
- (继承自 - enum.Flag) 此枚举可以用于控制- checkIndex()方法执行的检查。- 常量 - 描述 - QAbstractItemModel.CheckIndexOption.NoOption - 未指定任何检查选项。 - QAbstractItemModel.CheckIndexOption.IndexIsValid - 将模型索引传递给 - checkIndex()后,检查该索引是否为有效的模型索引。- QAbstractItemModel.CheckIndexOption.DoNotUseParent - 不对传递给 - checkIndex()的索引的父项使用进行检查。- QAbstractItemModel.CheckIndexOption.ParentIsInvalid - 将模型索引传递给 - checkIndex()的父项被检查以确定是否为无效模型索引。如果同时指定了此选项和DoNotUseParent,则忽略此选项。
 - 使用给定的 - parent构造一个抽象项模型。- beginInsertColumns(parent, first, last)#
- 参数:
- parent – - QModelIndex
- first – int 
- last – int 
 
 
 - 警告 - 本节包含自动从C++转换为Python的代码片段,可能包含错误。 - 开始列插入操作。 - 在子类中重新实现 - insertColumns()时,必须在向模型的基本数据存储中插入数据之前调用此函数。- 父索引 - parent对应于将新列插入其中的父元素;- first和- last是新列在插入后应有的列号。 插入列 插入列- 指定插入你想在模型元素中插入的列范围的首列和末列编号。 - 例如,如图所示,我们在第4列之前插入三列,所以 - first是4,- last是6。- beginInsertColumns(parent, 4, 6) - 这将三条新列插入为第4、5和6列。  追加列 追加列- 要追加列,请将它们插入到最后一个列之后。 - 例如,如图所示,我们在现有六列(以第5列为末尾)的集合后追加三列,所以 - first是6,- last是8。- beginInsertColumns(parent, 6, 8) - 这将两条新列追加为第6、7和8列。 - beginInsertRows(parent, first, last)#
- 参数:
- parent – - QModelIndex
- first – int 
- last – int 
 
 
 - 警告 - 本节包含自动从C++转换为Python的代码片段,可能包含错误。 - 开始行插入操作。 - 在子类中重新实现 - insertRows()时,必须在将数据插入模型的基础数据存储之前调用此函数。- parent索引对应于新行要插入的父元素;- first和- last是新行插入后将具有的行号。 插入行 插入行- 指定插入你想在模型元素中插入的行范围的首行和末行编号。 - 例如,如图所示,我们在第2行之前插入三行,所以 - first是2,- last是4。- beginInsertRows(parent, 2, 4) - 这将三条新行插入为第2、3和4行。  追加行 追加行- 要追加行,请将它们插入到最后一个行之后。 - 例如,如图所示,我们在现有四行(以第3行为末尾)的集合后追加两行,所以 - first是4,- last是5。- beginInsertRows(parent, 4, 5) - 这将两条新行追加为第4行和第5行。 - beginMoveColumns(sourceParent, sourceFirst, sourceLast, destinationParent, destinationColumn)#
- 参数:
- sourceParent – - QModelIndex
- sourceFirst – int 
- sourceLast – int 
- destinationParent – - QModelIndex
- destinationColumn – int 
 
- 返回类型:
- bool 
 
 - 开始列移动操作。 - 当重写子类时,此方法简化了在模型中移动实体的操作。此方法负责移动模型中的持久索引,否则您将需要自己完成。使用 beginMoveColumns 和 - endMoveColumns是emit- layoutAboutToBeChanged和- layoutChanged直接,同时对- changePersistentIndex的替代方案。- sourceParent索引对应于从中移动列的父级; - sourceFirst和- sourceLast是将被移动列的第一列和最后一列号。destinationParent索引对应于将此列移动到的父级。destinationChild是列要移动到的列。也就是说,sourceParent中列- sourceFirst的索引将变为destinationParent中列- destinationChild的索引,然后是所有其他列,直到- sourceLast。- 然而,当在同一父项下向下移动列时( - sourceParent和- destinationParent相同),列将被放置在- destinationChild索引之前。也就是说,如果您希望将列 0 和 1 移动,使其成为列 1 和 2,那么- destinationChild应为 3。在这种情况下,源列- i(位于- sourceFirst和- sourceLast之间)的新索引等于- (destinationChild-sourceLast-1+i)。- 注意,如果 - sourceParent和- destinationParent相同,您必须确保- destinationChild不在- sourceFirst和- sourceLast+ 1 的范围内。您还必须确保不要尝试将列移动到其自身的子代或祖先。如果这两个条件中的任何一个为真,该方法返回- false,在这种情况下,您应该中止您的移动操作。- 另请参阅 - beginMoveRows(sourceParent, sourceFirst, sourceLast, destinationParent, destinationRow)#
- 参数:
- sourceParent – - QModelIndex
- sourceFirst – int 
- sourceLast – int 
- destinationParent – - QModelIndex
- destinationRow – int 
 
- 返回类型:
- bool 
 
 - 警告 - 本节包含自动从C++转换为Python的代码片段,可能包含错误。 - 开始行移动操作。 - 在重新实现子类时,此方法简化了模型中实体的移动。该方法负责移动模型中的持久性索引,否则您将不得不自己执行这些操作。使用 beginMoveRows 和 - endMoveRows是直接发出- layoutAboutToBeChanged和- layoutChanged信号并与- changePersistentIndex结合的一种替代方法。- 代码 - sourceParent的索引对应于行移动的父项;- sourceFirst和- sourceLast是要移动的行的第一行和最后一行号。代码- destinationParent的索引对应于要移动这些行的父项。代码- destinationChild是要将行移动到的行。也就是说,在- sourceParent中的- sourceFirst行的索引将成为- destinationParent中的- destinationChild行的索引,随后是其他所有至上至- sourceLast的行。- 但是,当在同一父项内向下移动行时( - sourceParent和- destinationParent相同),这些行将被放置在- destinationChild索引之前。也就是说,如果您想将0行和1行移动到它们成为1行和2行,那么- destinationChild应该是3。在这种情况下,源行- i的新索引(位于- sourceFirst和- sourceLast之间)等于- (destinationChild-sourceLast-1+i)。- 请注意,如果 - sourceParent和- destinationParent相同,您必须确保- destinationChild不在- sourceFirst和- sourceLast+ 1 的范围内。您还必须确保您不尝试将行移动到其自己的子项或祖先。如果满足这两种条件之一,此方法返回- false,在这种情况下,您应该中止您的移动操作。 将行移动到另一个父项 将行移动到另一个父项- 在模型中指定您要在其中移动的源父项中要移动的行的第一行和最后一行号。也指定要将范围移动到目标父项中的行。 - 例如,如图所示,我们从源中移动2行到4行,因此 - sourceFirst为2,- sourceLast为4。我们将这些项目移动到目标中行2的上方,因此- destinationChild为2。- beginMoveRows(sourceParent, 2, 4, destinationParent, 2) - 这将从源中将三行行2、3和4移动到目的地,变为2、3和4。其他受影响的兄弟行相应地移位。  将行移动到另一个父项的附加中 将行移动到另一个父项的附加中- 要将行附加到另一个父项,请将它们移到最后一行之后。 - 例如,如图所示,我们将三行移到由6行组成的集合(以行5结束),因此 - destinationChild为6。- beginMoveRows(sourceParent, 2, 4, destinationParent, 6) - 这将从目标中将目标行移动到目标父项的末尾,为6、7和8。  在同一父项内向上移动行 在同一父项内向上移动行- 为了在同一父项内移动行,指定要移动它们的行。 - 例如,如图所示,我们将第二行的一项移动到第0行,所以 - sourceFirst和- sourceLast分别是 2,而- destinationChild是 0。- beginMoveRows(parent, 2, 2, parent, 0) - 请注意,其他行可能相应地被移动。还请注意,当在同一父项内移动项时,不应尝试无效或无操作的移动。在上面的例子中,移动物品2移动之前位于第2行,因此不能将其移动到第2行(其已存在的地方)或第3行(无操作,因为第3行表示在第3行之上,它本身已经是第3行)。  在同一父项中向下移动行 在同一父项中向下移动行- 为了在同一父项内移动行,指定要移动它们的行。 - 例如,如图所示,我们将第二行的一项目标到第四行,所以 - sourceFirst和- sourceLast分别是 2,而- destinationChild是 4。- beginMoveRows(parent, 2, 2, parent, 4) - 请注意,其他行可能相应地被移动。 - 另请参阅 - beginRemoveColumns(parent, first, last)#
- 参数:
- parent – - QModelIndex
- first – int 
- last – int 
 
 
 - 警告 - 本节包含自动从C++转换为Python的代码片段,可能包含错误。 - 开始进行列删除操作。 - 在派生类中 reimplementing - removeColumns()之前,您必须首先调用此函数。- parent指数对应于将要从中删除新列的父级;- first和- last分别是要删除的第一列和最后一列的列号。 删除列 删除列- 指定从模型中的项中删除的一组列的第一个和最后一个列号。 - 例如,如图所示,我们从第4列到第6列删除了三列,所以 - first是 4,而- last是 6。- beginRemoveColumns(parent, 4, 6) - beginRemoveRows(parent, first, last)#
- 参数:
- parent – - QModelIndex
- first – int 
- last – int 
 
 
 - 警告 - 本节包含自动从C++转换为Python的代码片段,可能包含错误。 - 开始进行行删除操作。 - 在派生类中 reimplementing - removeRows()之前,您必须首先调用此函数。- parent指数对应于将要从中删除新行的父级;- first和- last分别是要删除的第一行和最后一行的行号。 删除行 删除行- 指定模型中要删除行的起始和结束行号。 - 例如,如图所示,我们删除了第2行到第3行的两行,因此 - first为2,- last为3- beginRemoveRows(parent, 2, 3) - beginResetModel()#
 - 开始模型重置操作。 - 重置操作将模型重置到其当前状态中的任何附加视图。 - 注意 - 附加到此模型的所有视图也将重置。 - 当模型重置时,这意味着模型报告的任何先前数据现在都是无效的,并且必须再次查询。这也意味着当前项目以及任何选定的项目将变得无效。 - 当模型的数据发生根本变化时,有时只需调用此函数而不是发出 - dataChanged()以通知其他组件底层数据源或其结构已更改,这可能更容易。- 在您的模型或代理模型中重置任何内部数据结构之前,您必须调用此函数。 - 此函数产生信号 - modelAboutToBeReset().- buddy(index)#
- 参数:
- index – - QModelIndex
- 返回类型:
 
 - 返回由 - index表示的项目伙伴的模型索引。当用户想要编辑一个项目时,视图将调用此函数来检查是否应该编辑模型中的另一个项目。然后,视图将使用由图书伙伴项目返回的模型索引构建一个代理。- 此函数的默认实现使每个项目都是其自己的伙伴。 - canDropMimeData(data, action, row, column, parent)#
- 参数:
- data – - QMimeData
- 操作 – - DropAction
- 行 – int 
- 列 – int 
- parent – - QModelIndex
 
- 返回类型:
- bool 
 
 - 如果模型可以接受 - data的拖放操作,则返回- true。此默认实现仅检查- data是否至少在- mimeTypes()列表中有一个格式,以及- action是否在模型的- supportedDropActions()列表中。- 如果您想测试数据是否可以在 - row、- column、- parent位置以及- action下进行拖放,请在您的自定义模型中重写此函数。如果不需要这个测试,则不需要重写此函数。- 另请参阅 - dropMimeData()- Using drag and drop with item views- canFetchMore(parent)#
- 参数:
- parent – - QModelIndex
- 返回类型:
- bool 
 
 - 如果为 - parent提供了更多数据,则返回- true;否则返回- false。- 默认实现始终返回 - false。- 如果 - canFetchMore()返回- true,应该调用- fetchMore()函数。例如,这是 QAbstractItemView 的行为。- 另请参阅 - changePersistentIndex(from, to)#
- 参数:
- from – - QModelIndex
- to – - QModelIndex
 
 
 - 将等于给定 - from模型索引的- QPersistentModelIndex改变为给定的- to模型索引。- 如果没有找到等于给定 - from模型索引的持久模型索引,则不进行任何更改。- changePersistentIndexList(from, to)#
- 参数:
- from – QModelIndex 的列表 
- to – QModelIndex 的列表 
 
 
 - 将等于给定 - from模型索引列表的 {- QPersistentModelIndex} 转换为给定- to模型索引列表。- 如果在给定的 - from模型索引列表中没有找到等于的持久模型索引,则不做任何更改。- checkIndex(index[, options=QAbstractItemModel.CheckIndexOption.NoOption])#
- 参数:
- index – - QModelIndex
- options – - CheckIndexOption的组合
 
- 返回类型:
- bool 
 
 - 此函数检查 - index是否是该模型的有效模型索引。一个有效的模型索引可以是无效模型索引,也可以满足以下所有条件的有效模型索引:- 索引的模型是 - this;
- 索引的行大于或等于零; 
- 索引的行小于索引父项的行数; 
- 索引的列大于或等于零; 
- 索引的列小于索引父项的列数。 
 - options参数可以更改一些检查。如果- options包含- IndexIsValid,则- index必须是一个有效索引;这在重新实现期望有效索引的功能(例如- data()或- setData())时非常有用。- 如果 - options包含- DoNotUseParent,则省略会调用- parent()的检查;这允许从一个- parent()的重新实现中调用此函数(否则,这会导致无限递归和崩溃)。- 如果 - options不包含- DoNotUseParent,并且包含- ParentIsInvalid,那么将执行额外的检查:检查父索引是否无效。这在实现如列表或表格等平面模型时很有用,在这些模型中,不允许模型索引有有效的父索引。- 此函数返回所有检查成功的值为 true,否则为 false。这允许在 - Q_ASSERT和类似的其他调试机制中使用该函数。如果有检查失败,将在- qt.core.qabstractitemmodel.checkindex记录类别中打印警告信息,包含一些可能有助于调试失败的信息。- 注意 - 此函数是用于实现自己的项目模型的调试辅助工具。在开发复杂模型以及构建复杂的模型层次结构(例如使用代理模型)时,调用此函数以便捕获由于意外将非法模型索引(如上所述)传递给一些 - QAbstractItemModelAPI 而产生的错误非常有用。- clearItemData(index)#
- 参数:
- index – - QModelIndex
- 返回类型:
- bool 
 
 - 删除给定 - index存储的所有角色数据。如果成功,则返回- true;否则返回- false。如果成功删除了数据,则应发出- dataChanged()信号。基类实现返回- false- abstract columnCount([parent=QModelIndex()])#
- 参数:
- parent – - QModelIndex
- 返回类型:
- int 
 
 - 返回给定 - parent的子项列数。- 在大多数子类中,列数与 - parent无关。- 例如 - int MyModel::columnCount(const QModelIndex &parent) const { Q_UNUSED(parent); return 3; } - columnsAboutToBeInserted(parent, first, last)#
- 参数:
- parent – - QModelIndex
- first – int 
- last – int 
 
 
 - 此信号在列即将插入模型时发出。新项目将在 - first和- last之间(包含),位于给定的- parent项目下。- 注意 - 连接到此信号的组件使用它来适应模型维度变化。它只能由 - QAbstractItemModel的实现发出,不能在子类代码中显式发出。- columnsAboutToBeMoved(sourceParent, sourceStart, sourceEnd, destinationParent, destinationColumn)#
- 参数:
- sourceParent – - QModelIndex
- sourceStart – int 
- sourceEnd – int 
- destinationParent – - QModelIndex
- destinationColumn – int 
 
 
 - 此信号在列即将在模型中移动时发出。将要移动的项目是位于 - sourceStart和- sourceEnd之间(包含),位于给定的- sourceParent项目下。它们将被移动到- destinationParent,从列- destinationColumn开始。- columnsAboutToBeRemoved(parent, first, last)#
- 参数:
- parent – - QModelIndex
- first – int 
- last – int 
 
 
 - 此信号在列即将从模型中删除时发出。要删除的项目是位于 - first和- last之间(包含),位于给定- parent项目下。- 注意 - 连接到此信号的组件使用它来适应模型维度变化。它只能由 - QAbstractItemModel的实现发出,不能在子类代码中显式发出。- columnsInserted(parent, first, last)#
- 参数:
- parent – - QModelIndex
- first – int 
- last – int 
 
 
 - 在将列插入到模型后,会产生此信号。新的项是指在给定 - parent项下,从- first到- last(包括)之间的项目。- 注意 - 连接到此信号的组件使用它来适应模型维度变化。它只能由 - QAbstractItemModel的实现发出,不能在子类代码中显式发出。- columnsMoved(sourceParent, sourceStart, sourceEnd, destinationParent, destinationColumn)#
- 参数:
- sourceParent – - QModelIndex
- sourceStart – int 
- sourceEnd – int 
- destinationParent – - QModelIndex
- destinationColumn – int 
 
 
 - 在模型内部移动列之后产生此信号。从 - sourceStart到- sourceEnd(包括)之间在指定的- sourceParent项下的项已被移动到- destinationParent,并从列号- destinationColumn开始。- columnsRemoved(parent, first, last)#
- 参数:
- parent – - QModelIndex
- first – int 
- last – int 
 
 
 - 从模型中删除列后产生此信号。删除的项目是给定 - parent项下,从- first到- last(包括)之间的项目。- 注意 - 连接到此信号的组件使用它来适应模型维度变化。它只能由 - QAbstractItemModel的实现发出,不能在子类代码中显式发出。- createIndex(row, column, ptr)#
- 参数:
- 行 – int 
- 列 – int 
- ptr – 对象 
 
- 返回类型:
 
 - 为给定的行和列以及内部指针 ptr 创建模型索引。当使用 QSortFilterProxyModel 时,其索引有其自己的内部指针。不建议在模型之外访问此内部指针。请使用 data() 函数代替。此函数提供了一个模型子类必须使用的持久接口来创建模型索引。 - 警告 - 由于一些 Qt/Python 集成规则,ptr 参数在 QModelIndex 生命周期内不会增加引用。因此,在过程中必须保持 ptr 参数所使用的对象存活。如果您不确定这一点,不要销毁对象。 - createIndex(row, column[, id=0])
- 参数:
- 行 – int 
- 列 – int 
- id – - quintptr
 
- 返回类型:
 
 - 为指定的 - row和- column使用内部标识符- id创建模型索引。- 此函数提供了一种统一的接口,模型子类必须使用它来创建模型索引。 - 另请参阅 - 摘要 data(index[, role=Qt.DisplayRole])#
- 参数:
- index – - QModelIndex
- role - int 
 
- 返回类型:
- 对象 
 
 - 返回由 - index指向的项在给定- role下存储的数据。- dataChanged(topLeft, bottomRight[, roles=list()])#
- 参数:
- topLeft - - QModelIndex
- bottomRight - - QModelIndex
- roles - int 列表 
 
 
 - 每当现有项中的数据更改时都会发出此信号。 - 如果项具有相同的父级,则受影响的项是从 - topLeft到- bottomRight包含的项。如果项没有相同的父级,则行为未定义。- 在重写 - setData()函数时必须显式发出此信号。- 可选的 - roles参数可以用来指定哪些数据角色已被修改。如果 roles 参数为空向量,则表示应考虑所有角色已修改。roles 参数中元素的顺序没有任何意义。- decodeData(row, column, parent, stream)#
- 参数:
- 行 – int 
- 列 – int 
- parent – - QModelIndex
- stream - - QDataStream
 
- 返回类型:
- bool 
 
 - dropMimeData(data, action, row, column, parent)#
- 参数:
- data – - QMimeData
- 操作 – - DropAction
- 行 – int 
- 列 – int 
- parent – - QModelIndex
 
- 返回类型:
- bool 
 
 - 处理由给定 - action结束的拖放操作提供的- data。- 如果模型处理了数据和操作,则返回 - true;否则返回- false。- 指定的 - row、- column和- parent表示操作结束的位置在模型中的项。模型有责任在正确的位置完成操作。- 例如,在一个 QTreeView 中的项上进行的拖动操作可以导致新项作为由 - row、- column和- parent指定的项的子项插入,或者作为该项的兄弟项。- 当 - row和- column为 -1 时,表示应将放置的数据视为直接放置在- parent上。通常这意味着将数据作为- parent的子项追加。如果- row和- column大于或等于零,则表示在指定的- parent中的指定- row和- column处发生了放置。- 调用 - mimeTypes()成员来实现可接受的 MIME 类型的列表。此默认实现假定- mimeTypes()的默认实现,它返回单个默认 MIME 类型。如果您在您的自定义模型中重新实现了- mimeTypes()以返回多个 MIME 类型,则必须重新实现此函数以使用这些类型。- 另请参阅 - supportedDropActions()- canDropMimeData()- 使用项视图进行拖放和放置- encodeData(indexes, stream)#
- 参数:
- indexes – .QModelIndex 列表 
- stream - - QDataStream
 
 
 - endInsertColumns()#
 - 结束列插入操作。 - 在子类中重写 - insertColumns()函数时,您必须在将数据插入模型的基础数据存储后调用此函数。- 另请参阅 - endInsertRows()#
 - 结束行插入操作。 - 在子类中重写 - insertRows()函数时,您必须在将数据插入模型的基础数据存储后调用此函数。- 另请参阅 - endMoveColumns()#
 - 结束列移动操作。 - 在实现子类时,您必须在移动模型基础数据存储中的数据后调用此函数。 - 另请参阅 - endMoveRows()#
 - 结束行移动操作。 - 在实现子类时,您必须在移动模型基础数据存储中的数据后调用此函数。 - 另请参阅 - endRemoveColumns()#
 - 结束列删除操作。 - 在子类中重写 - removeColumns()函数时,您必须在从模型的基础数据存储中删除数据后调用此函数。- 另请参阅 - endRemoveRows()#
 - 结束行删除操作。 - 在子类中重写 - removeRows()函数时,您必须在从模型的基础数据存储中删除数据后调用此函数。- 另请参阅 - endResetModel()#
 - 完成模型重置操作。 - 您必须在对模型或代理模型中的任何内部数据结构进行重置后调用此函数。 - 此函数会发出信号 - modelReset()。- 另请参阅 - fetchMore(parent)#
- 参数:
- parent – - QModelIndex
 
 - 获取由父 - parent索引指定的项目的任何可用数据。- 如果您正在增量填充模型,则应重写此函数。 - 默认实现不执行任何操作。 - 另请参阅 - flags(index)#
- 参数:
- index – - QModelIndex
- 返回类型:
- ItemFlag的组合
 
 - 返回给定 - index的项目标志。- 基类实现返回的组合标志使项( - ItemIsEnabled)可用,并允许选择该项(《ItemIsSelectable》)。- 另请参阅 - 项目标志- hasChildren([parent=QModelIndex()])#
- 参数:
- parent – - QModelIndex
- 返回类型:
- bool 
 
 - 如果 - parent有任何子项,则返回- true;否则返回- false。- 使用父项上的 - rowCount()来找出子项的数量。- 请注意,如果在具有 - ItemNeverHasChildren标志的情况下报告特定索引的 hasChildren,则这种行为是未定义的。- hasIndex(row, column[, parent=QModelIndex()])#
- 参数:
- 行 – int 
- 列 – int 
- parent – - QModelIndex
 
- 返回类型:
- bool 
 
 - 如果模型为 - row和- column以及- parent返回一个有效的- QModelIndex,则返回- true;否则返回- false。- headerData(section, orientation[, role=Qt.DisplayRole])#
- 参数:
- section – int 
- orientation – - Orientation
- role - int 
 
- 返回类型:
- 对象 
 
 - 返回给定 - role和- section在指定- orientation的表头中的数据。- 对于水平表头,节号对应列号。同样地,对于垂直表头,节号对应行号。 - headerDataChanged(orientation, first, last)#
- 参数:
- orientation – - Orientation
- first – int 
- last – int 
 
 
 - 每当头部发生变化时,都会发出此信号。 - orientation表示水平或垂直头部是否发生变化。需要更新从- first到- last的头部部分。- 在重新实现 - setHeaderData()函数时,必须显式发出此信号。- 如果您正在更改列数或行数,则不需要发出此信号,而是使用begin/end函数(请参阅 - QAbstractItemModel类描述中的子类章节以获取详细信息)。- 另请参阅 - headerData()- setHeaderData()- dataChanged()- 抽象 index(row, column[, parent=QModelIndex()])#
- 参数:
- 行 – int 
- 列 – int 
- parent – - QModelIndex
 
- 返回类型:
 
 - 返回由给定的 - row、- column和- parent索引指定的模型中项的索引。- 在子类中重新实现此函数时,调用 - createIndex()以生成模型索引,其他组件可以使用这些索引来引用模型中的项。- 另请参阅 - insertColumn(column[, parent=QModelIndex()])#
- 参数:
- 列 – int 
- parent – - QModelIndex
 
- 返回类型:
- bool 
 
 - 在指定 - parent的子项中,在给定的- column之前插入一个单列。- 如果列已插入,则返回 - true;否则返回- false。- 另请参阅 - insertColumns()- insertRow()- removeColumn()- insertColumns(column, count[, parent=QModelIndex()])#
- 参数:
- 列 – int 
- count – 整数 
- parent – - QModelIndex
 
- 返回类型:
- bool 
 
 - 对于支持此功能的数据模型,在指定的 - column前插入- count个新列。新列中的项目将是子项的表示,由- parent模型索引表示的项。- 如果 - column是 0,则将新列插入到现有列之前。- 如果 - column等于- columnCount(),则将新列附加到现有列之后。- 如果 - parent没有子项,则插入一行具有- count列。- 如果成功插入列,则返回 - true;否则返回- false。- 基类实现不执行任何操作并返回 - false。- 如果您实现了自己的模型,您可以根据需要重新实现此函数以支持插入操作。或者,您可以为更改数据提供自己的 API。 - insertRow(row[, parent=QModelIndex()])#
- 参数:
- 行 – int 
- parent – - QModelIndex
 
- 返回类型:
- bool 
 
 - 在指定的 - row所指定的父项子项之前插入一行。- 注意 - 此函数调用虚方法 - insertRows。- 如果行成功插入,则返回 - true;否则返回- false。- insertRows(row, count[, parent=QModelIndex()])#
- 参数:
- 行 – int 
- count – 整数 
- parent – - QModelIndex
 
- 返回类型:
- bool 
 
 - 注意 - 该函数的基本类实现不执行任何操作,并返回 - false。- 对于支持此功能的数据模型,在给定的 - row之前向模型中插入- count行。新行的项目将作为由- parent模型索引表示的项目子项。- 如果 - row是 0,则将这些行 prepend 到父项中任何现有行之前。- 如果 - row等于- rowCount(),则将这些行 append 到父项中任何现有行之后。- 如果 - parent没有子项,则插入一个由- count行组成的单一列。- 如果成功插入行,则返回 - true;否则返回- false。- 如果您实现了自己的模型,则可以根据需要重新实现此函数以支持插入。或者,您可以提供更改数据的自己的 API。在任何情况下,您都需要调用 - beginInsertRows()和- endInsertRows()来通知其他组件模型已更改。- itemData(index)#
- 参数:
- index – - QModelIndex
- 返回类型:
- 类型为 int 的键和类型为 QVariant 的值的字典。 
 
 - 返回一个映射,其中包含给定 - index处的项目的所有预定义角色的值。- 如果您想扩展此函数的默认行为,以包含映射中的自定义角色,则应重新实现此函数。 - layoutAboutToBeChanged([parents=list()[, hint=QAbstractItemModel.NoLayoutChangeHint]])#
- 参数:
- parents – .list of QPersistentModelIndex 
- hint – - LayoutChangeHint
 
 
 - 这个信号在模型布局即将改变之前发出。连接到该信号的组件可以使用它来适应模型布局的变化。 - 子类应该在发出 layoutAboutToBeChanged() 之后更新任何持久模型索引。 - 可选的 - parents参数用于提供有关模型布局中哪些部分正在更改的更具体的通知。空列表表示整个模型布局的改变。列表中元素的顺序不重要。可选的- hint参数用于在模型重排期间提供提示。- layoutChanged([parents=list()[, hint=QAbstractItemModel.NoLayoutChangeHint]])#
- 参数:
- parents – .list of QPersistentModelIndex 
- hint – - LayoutChangeHint
 
 
 - 这个信号会在模型暴露的项的布局发生变化时发出;例如,当模型已排序时。当视图接收到该信号时,应更新项的布局以反映这种变化。 - 在子类化 - QAbstractItemModel或- QAbstractProxyModel时,确保在更改项的顺序或更改向视图公开的数据的结构之前发出- layoutAboutToBeChanged(),并且在布局变更后发出 layoutChanged()。- 可选的 - parents参数用于提供有关模型布局中哪些部分正在更改的更具体的通知。空列表表示整个模型布局的改变。列表中元素的顺序不重要。可选的- hint参数用于在模型重排期间提供提示。- 子类应该在发出 layoutChanged() 之前更新任何持久模型索引。换句话说,当结构发生变化时 
- 记住将要改变的 - QModelIndex
- 更新您的内部数据 
- 发出 layoutChanged 
 - match(start, role, value[, hits=1[, flags=Qt.MatchFlags(Qt.MatchStartsWith|Qt.MatchWrap)]])#
- 参数:
- start – - QModelIndex
- role - int 
- value – 对象 
- hits – 整数 
- flags – - MatchFlag的组合
 
- 返回类型:
- . QModelIndex 列表 
 
 - 返回一个列表,包含与在 - start指索引列中的数据存储的数据项在给定的- role下匹配指定的- value的- QModelIndex。搜索方式由给定的- flags定义。返回的列表可能为空。请注意,如果使用代理模型,列表中结果的顺序可能与模型中的顺序不对应,因此结果的顺序不可靠。- 搜索从 - start指索引开始,直到匹配的数据项数量等于- hits、搜索达到最后一行或搜索再次到达- start,具体取决于是否在- flags中指定了- MatchWrap。如果您想搜索所有匹配项,请使用- hits= -1。- 默认情况下,此函数将对所有项执行基于文本的环绕比较,搜索以 - value指定的搜索词开头的项。- 注意 - 此函数的默认实现仅搜索列。重新实现此函数以包括不同的搜索行为。 - 返回一个包含对应于指定的 - indexes列表的数据项序列化对象的函数。用于描述编码数据的格式是从- mimeTypes()函数获得的。默认实现使用- mimeTypes()的默认实现返回的默认 MIME 类型。如果在你自定义的模型中重写- mimeTypes()以返回更多的 MIME 类型,则需要重写此函数以使用它们。- 如果 - indexes列表为空,或者没有支持的 MIME 类型,则返回- None而不是序列化的空列表。- mimeTypes()#
- 返回类型:
- 字符串列表 
 
 - 返回允许的 MIME 类型列表。默认情况下,内置的模型和视图使用一个内部 MIME 类型: - application/x-qabstractitemmodeldatalist。- 在自定义模型中实现拖放支持时,如果您将以除了默认内部 MIME 类型之外的其他格式返回数据,则需要重写此函数以返回您的 MIME 类型列表。 - 如果您在自定义模型中重写此函数,还必须重写调用它的成员函数: - mimeData()和- dropMimeData()。- 另请参阅 - modelAboutToBeReset()#
 - 当调用 - beginResetModel()时,在模型内部状态(例如持久性模型索引)被无效化之前,会发出此信号。- modelReset()#
 - 当调用 - endResetModel()方法后,模型内部状态(例如持久化模型索引)被无效化时,会发出此信号。- 请注意,如果模型被重置,则应考虑之前从中检索到的所有信息都是无效的。这包括但不限于 - rowCount()和- columnCount(),- flags(),通过- data()获取的数据,以及- roleNames()。- moveColumn(sourceParent, sourceColumn, destinationParent, destinationChild)#
- 参数:
- sourceParent – - QModelIndex
- sourceColumn – int 
- destinationParent – - QModelIndex
- destinationChild – int 
 
- 返回类型:
- bool 
 
 - 在支持此功能的模型上,将 - sourceColumn从- sourceParent移动到- destinationChild下的- destinationParent。- 如果列成功移动,则返回 - true;否则返回- false。- 另请参阅 - moveColumns(sourceParent, sourceColumn, count, destinationParent, destinationChild)#
- 参数:
- sourceParent – - QModelIndex
- sourceColumn – int 
- count – 整数 
- destinationParent – - QModelIndex
- destinationChild – int 
 
- 返回类型:
- bool 
 
 - 在支持此功能的模型上,将起始于给定 - sourceColumn的- count列从父项- sourceParent下移动到父项- destinationParent的- destinationChild下的列。- 如果列成功移动,则返回 - true;否则返回- false。- 基类实现不执行任何操作并返回 - false。- 如果您实现了自己的模型,您可以根据需要支持移动来重写此函数。或者,您可以提供自己的API来更改数据。 - moveRow(sourceParent, sourceRow, destinationParent, destinationChild)#
- 参数:
- sourceParent – - QModelIndex
- sourceRow – int 
- destinationParent – - QModelIndex
- destinationChild – int 
 
- 返回类型:
- bool 
 
 - 在支持该功能的模型上,将 - sourceRow从- sourceParent移动到- destinationChild下的- destinationParent。- 如果行成功移动,则返回 - true;否则返回- false。- 另请参阅 - moveRows(sourceParent, sourceRow, count, destinationParent, destinationChild)#
- 参数:
- sourceParent – - QModelIndex
- sourceRow – int 
- count – 整数 
- destinationParent – - QModelIndex
- destinationChild – int 
 
- 返回类型:
- bool 
 
 - 在支持此功能的模型中,将起始 - sourceRow的- count行从父- sourceParent移动到父- destinationParent下的- destinationChild。- 如果行成功移动,则返回 - true;否则返回- false。- 基类实现不执行任何操作并返回 - false。- 如果您实现了自己的模型,您可以根据需要支持移动来重写此函数。或者,您可以提供自己的API来更改数据。 - 抽象parent(child)#
- 参数:
- child – - QModelIndex
- 返回类型:
 
 - 返回具有给定 - index的模型项的父项。如果项没有父项,则返回一个无效的- QModelIndex。- 在公开树数据结构的模型中,常见的约定是,只有第一列的项有子项。对于这种情况下,在子类中重新实现此函数时,返回的 - QModelIndex的列将会是 0。- 在子类中重新实现此函数时,请注意避免调用像是 - QModelIndex成员函数,例如- parent(),因为这些属于你的模型,将简单调用你的实现,导致无限递归。- 另请参阅 - persistentIndexList()#
- 返回类型:
- . QModelIndex 列表 
 
 - 返回存储在模型中的持久索引列表。 - removeColumn(column[, parent=QModelIndex()])#
- 参数:
- 列 – int 
- parent – - QModelIndex
 
- 返回类型:
- bool 
 
 - 从父项指定的 - parent子项中删除指定的- column。- 如果删除列则返回 - true,否则返回- false。- removeColumns(column, count[, parent=QModelIndex()])#
- 参数:
- 列 – int 
- count – 整数 
- parent – - QModelIndex
 
- 返回类型:
- bool 
 
 - 支持此功能的模型上,从指定在父项 - parent下以给定- column开始的- count列从模型中删除。- 如果列成功删除则返回 - true,否则返回- false。- 基类实现不执行任何操作并返回 - false。- 如果你实现了自己的模型,你可以重新实现此函数以支持删除。或者,你也可以提供一个用于修改数据的自定义 API。 - removeRow(row[, parent=QModelIndex()])#
- 参数:
- 行 – int 
- parent – - QModelIndex
 
- 返回类型:
- bool 
 
 - 从指定的 - parent指定的子项中移除给定的- row。- 如果行已被移除,则返回 - true;否则返回- false。- 这是一个方便的函数,它调用 - removeRows()。在- QAbstractItemModel的- removeRows()实现中,什么都不做。- removeRows(row, count[, parent=QModelIndex()])#
- 参数:
- 行 – int 
- count – 整数 
- parent – - QModelIndex
 
- 返回类型:
- bool 
 
 - 在支持此功能的情况下,从父项 - parent下的模型中移除从给定- row开始的- count行。- 如果行被成功移除,则返回 - true;否则返回- false。- 基类实现不执行任何操作并返回 - false。- 如果你实现了自己的模型,你可以重新实现此函数以支持删除。或者,你也可以提供一个用于修改数据的自定义 API。 - resetInternalData()#
 - 警告 - 本节包含自动从C++转换为Python的代码片段,可能包含错误。 - 当模型的重置过程中清除了内部数据后,会调用此槽。 - 此插槽为具体代理模型的子类提供了便利,例如 - QSortFilterProxyModel的子类,它们维护额外的数据。- class CustomDataProxy(QSortFilterProxyModel): Q_OBJECT # public CustomDataProxy(QObject parent) super().__init__(parent) ... QVariant data(QModelIndex index, int role) override if role != Qt.BackgroundRole: return QSortFilterProxyModel.data(index, role) if m_customData.contains(index.row()): return m_customData.value(index.row()) return QSortFilterProxyModel.data(index, role) # private slots def resetInternalData(): m_customData.clear() # private QVariant> = QHash<int,() - revert()#
 - 通知模型应该丢弃缓存的信息。此函数通常用于行编辑。 - 另请参阅 - roleNames()#
- 返回类型:
- 键为.int类型,值为.QByteArray类型的字典。 
 
 - 返回模型的角色名称。 - Qt设置默认角色名称如下: - Qt 角色 - QML 角色名称 - 显示 - 装饰 - 编辑 - 工具提示 - 状态提示 - 这是什么 - abstract rowCount([parent=QModelIndex()])#
- 参数:
- parent – - QModelIndex
- 返回类型:
- int 
 
 - 返回给定 - parent下的行数。当parent有效时,意味着rowCount返回的是parent的子项数量。- rowsAboutToBeInserted(parent, first, last)#
- 参数:
- parent – - QModelIndex
- first – int 
- last – int 
 
 
 - 在将行插入模型之前发出此信号。新项目将被放置在 - start和- end之间(包括端点),在给定的- parent项下。- 注意 - 连接到此信号的组件使用它来适应模型维度变化。它只能由 - QAbstractItemModel的实现发出,不能在子类代码中显式发出。- rowsAboutToBeMoved(sourceParent, sourceStart, sourceEnd, destinationParent, destinationRow)#
- 参数:
- sourceParent – - QModelIndex
- sourceStart – int 
- sourceEnd – int 
- destinationParent – - QModelIndex
- destinationRow – int 
 
 
 - 在模型内部移动行之前发出此信号。将要移动的项目是那些在 - sourceStart和- sourceEnd之间(包括端点),在给定的- sourceParent项下。它们将被移动到- destinationParent,从行- destinationRow开始移动。- rowsAboutToBeRemoved(parent, first, last)#
- 参数:
- parent – - QModelIndex
- first – int 
- last – int 
 
 
 - 此信号在从模型中删除行之前发出。将被删除的项目是在给定 - parent项下,从- first到- last(包含两端)范围内的项目。- 注意 - 连接到此信号的组件使用它来适应模型维度变化。它只能由 - QAbstractItemModel的实现发出,不能在子类代码中显式发出。- rowsInserted(parent, first, last)#
- 参数:
- parent – - QModelIndex
- first – int 
- last – int 
 
 
 - 此信号在将行插入模型之后发出。新项是在给定 - parent项下,从- first到- last(包含两端)范围内的项目。- 注意 - 连接到此信号的组件使用它来适应模型维度变化。它只能由 - QAbstractItemModel的实现发出,不能在子类代码中显式发出。- rowsMoved(sourceParent, sourceStart, sourceEnd, destinationParent, destinationRow)#
- 参数:
- sourceParent – - QModelIndex
- sourceStart – int 
- sourceEnd – int 
- destinationParent – - QModelIndex
- destinationRow – int 
 
 
 - 此信号在模型内移动行之后发出。从 - sourceStart到- sourceEnd(包含两端)范围内的项目,在给定- sourceParent项下,已移动到- destinationParent,并从行号- destinationRow开始。- rowsRemoved(parent, first, last)#
- 参数:
- parent – - QModelIndex
- first – int 
- last – int 
 
 
 - 此信号在从模型中删除行之后发出。被删除的项目是在给定 - parent项下,从- first到- last(包含两端)范围内的项目。- 注意 - 连接到此信号的组件使用它来适应模型维度变化。它只能由 - QAbstractItemModel的实现发出,不能在子类代码中显式发出。- setData(index, value[, role=Qt.EditRole])#
- 参数:
- index – - QModelIndex
- value – 对象 
- role - int 
 
- 返回类型:
- bool 
 
 - 将索引为 - index的项的- role数据设置为- value。- 若成功则返回 - true;否则返回- false。- 如果数据被成功设置,应发射 - dataChanged()信号。- 基本类实现返回 - false。对于可编辑模型,必须重新实现此函数和- data()函数。- 另请参阅 - setHeaderData(section, orientation, value[, role=Qt.EditRole])#
- 参数:
- section – int 
- orientation – - Orientation
- value – 对象 
- role - int 
 
- 返回类型:
- bool 
 
 - 将给定 - role和- section的头部数据设置为指定的- orientation的- value值。- 如果更新了头部的数据,则返回 - true;否则返回- false。- 在重新实现此函数时,必须显式发射 - headerDataChanged()信号。- 另请参阅 - setItemData(index, roles)#
- 参数:
- index – - QModelIndex
- roles – 类型为 .int 的键和类型为 QVariant 的值的字典。 
 
- 返回类型:
- bool 
 
 - 将 - index处项目的作用域数据设置为- roles中关联的值,适用于每个- ItemDataRole。- 若成功则返回 - true;否则返回- false。- 不在 - roles中的作用域将不会被修改。- 另请参阅 - sibling(row, column, idx)#
- 参数:
- 行 – int 
- 列 – int 
- idx – - QModelIndex
 
- 返回类型:
 
 - 返回位于 - index的项在- row和- column位置的兄弟项,如果没有该位置的兄弟项,则返回一个无效的- QModelIndex。- sibling() 是一个方便函数,用于找到项的父项,并使用它来检索指定 - row和- column下的子项索引。- 此方法可以针对特定的优化进行覆盖。 - 按给定的 - order对模型按- column排序。- 基类实现不执行任何操作。 - span(index)#
- 参数:
- index – - QModelIndex
- 返回类型:
 
 - 返回由 - index表示的项的行和列跨度。- 注意 - 目前,未使用span。 - submit()#
- 返回类型:
- bool 
 
 - 让模型知道它应该将缓存的信息提交到永久存储。此函数通常用于行编辑。 - 如果没有错误,返回 - true;否则返回- false。- 另请参阅 - supportedDragActions()#
- 返回类型:
- DropAction的组合
 
 - 返回本模型数据所支持的操作。 - 默认实现返回 - supportedDropActions()。如果您想支持额外的操作,则需重写此函数。- supportedDragActions用于在拖动发生时作为- QAbstractItemView的- startDrag()的默认值。- 另请参阅 - DropActions使用- drag和- drop在- item- views- supportedDropActions()#
- 返回类型:
- DropAction的组合
 
 - 返回此模型支持的下拽操作。 - 默认实现返回 - CopyAction。如果您想支持额外的操作,则需重写此函数。同时您还需要重写- dropMimeData()函数以处理额外的操作。- 另请参阅 - dropMimeData()下拽操作