PySide6.QtCore.QAbstractTableModel¶
- class QAbstractTableModel¶
QAbstractTableModel
类提供了一个抽象模型,可以被子类化以创建表格模型。更多…继承自:
QSqlQueryModel
,QSqlTableModel
,QSqlRelationalTableModel
概要¶
方法¶
def
__init__()
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
QAbstractTableModel
为将其数据表示为二维项目数组的模型提供了一个标准接口。它不直接使用,但必须被子类化。由于该模型提供了比
QAbstractItemModel
更专门的接口,因此它不适合与树视图一起使用,尽管它可以用于向QListView提供数据。如果您需要表示一个简单的项目列表,并且只需要一个模型来包含单列数据,那么子类化QAbstractListModel
可能更为合适。rowCount()
和columnCount()
函数返回表格的维度。要检索模型中对应项的模型索引,请使用index()
并仅提供行号和列号。子类化¶
当子类化
QAbstractTableModel
时,你必须实现rowCount()
、columnCount()
和data()
。QAbstractTableModel
提供了index()
和parent()
函数的默认实现。行为良好的模型还会实现headerData()
。可编辑模型需要实现
setData()
,并实现flags()
以返回包含ItemIsEditable
的值。提供可调整大小数据结构接口的模型可以实现
insertRows()
、removeRows()
、insertColumns()
和removeColumns()
。在实现这些函数时,重要的是调用适当的函数,以便所有连接的视图都能意识到任何变化:一个
insertRows()
实现必须在向数据结构中插入新行之前调用beginInsertRows()
,并且必须在此之后立即调用endInsertRows()
。一个
insertColumns()
实现必须在向数据结构中插入新列之前调用beginInsertColumns()
,并且必须在此之后立即调用endInsertColumns()
。一个
removeRows()
实现必须在从数据结构中移除行之前调用beginRemoveRows()
,并且必须在移除后立即调用endRemoveRows()
。一个
removeColumns()
实现必须在从数据结构中移除列之前调用beginRemoveColumns()
,并且必须在此之后立即调用endRemoveColumns()
。
注意
有关子类化模型的一些一般指南可在模型子类化参考中找到。
线程安全¶
作为QObject的子类,
QAbstractTableModel
不是线程安全的
。任何与QAbstractTableModel
模型相关的API只能从模型对象所在的线程调用。如果QAbstractTableModel
与视图连接,这意味着GUI线程,因为视图位于该线程中,并且它将从GUI线程调用模型。使用后台线程填充或修改模型的内容是可能的,但需要小心,因为后台线程不能直接调用任何与模型相关的API。相反,您应该将更新排队并在主线程中应用它们。这可以通过排队连接来完成。为给定的
parent
构建一个抽象表模型。