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构建一个抽象表模型。