- 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()
。
注意
Model Subclassing Reference 中提供了关于对模型进行子类化的一般指南。
线程安全
作为QObject的子类,
QAbstractTableModel
并非线程安全的。任何有关QAbstractTableModel
模型的API调用都应该只在该模型对象存在的线程中进行。如果QAbstractTableModel
与视图连接,即GUI线程(视图所在的位置),它将从GUI线程调用模型。使用后台线程填充或修改模型的内容是可能的,但需要小心,因为后台线程不能直接调用任何与模型相关的API。相反,您应该在主线程中排队更新并应用它们。这可以通过排队连接实现。为给定
parent
构建一个抽象表模型。