QAbstractTableModel Class
QAbstractTableModel 类提供了一个抽象模型,可以通过继承该类来创建表格模型。更多内容...
| 头文件: | #include <QAbstractTableModel> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| 继承自: | QAbstractItemModel |
| 被继承者: |
公共函数
| QAbstractTableModel(QObject *parent = nullptr) | |
| virtual | ~QAbstractTableModel() |
重新实现的公共函数
| virtual bool | dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override |
| virtual Qt::ItemFlags | flags(const QModelIndex &index) const override |
| virtual QModelIndex | index(int row, int column, const QModelIndex &parent = QModelIndex()) const override |
| virtual QModelIndex | sibling(int row, int column, const QModelIndex &idx) const override |
详细说明
QAbstractTableModel 为将数据表示为二维项目数组的模型提供了一个标准接口。它不能直接使用,必须通过子类化来继承。
由于该模型提供的接口比QAbstractItemModel 更专业,因此不适合与树形视图配合使用,尽管它可用于向QListView 提供数据。如果您需要表示一个简单的项目列表,且模型只需包含单列数据,那么继承QAbstractListModel 可能更为合适。
rowCount() 和columnCount() 函数会返回表格的维度信息。若要获取模型中某个项对应的模型索引,请使用index() 并仅提供行号和列号。
子类化
在继承 QAbstractTableModel 时,必须实现rowCount()、columnCount() 和data() 方法。index() 和parent() 方法的默认实现由 QAbstractTableModel 提供。行为良好的模型还应实现headerData() 方法。
可编辑模型需要实现setData(),并实现flags() 以返回一个包含Qt::ItemIsEditable 的值。
为可调整大小的数据结构提供接口的模型,可以实现insertRows()、removeRows()、insertColumns() 和removeColumns() 函数。在实现这些函数时,务必调用相应的函数,以确保所有关联的视图都能感知到任何变化:
- insertRows() 的实现必须在向数据结构中插入新行之前调用beginInsertRows(),并在插入后立即调用endInsertRows()。
- insertColumns() 的实现必须在向数据结构中插入新列之前调用beginInsertColumns(),并在之后立即调用endInsertColumns()。
- removeRows() 的实现必须在从数据结构中删除行之前调用beginRemoveRows(),并且必须在删除后立即调用endRemoveRows()。
- removeColumns() 的实现必须在将列从数据结构中移除之前调用beginRemoveColumns(),并且必须在之后立即调用endRemoveColumns()。
注意: 《模型子类化参考》中提供了有关模型子类化的一些 通用指南。
线程安全性
作为QObject 的子类,QAbstractTableModel 并非thread-safe 。任何与 QAbstractTableModel 模型相关的 API 都应仅从模型对象所在的线程调用。如果 QAbstractTableModel 连接到一个视图,它将在 GUI 线程上运行,因为视图位于该线程,并从该线程与模型进行交互。 虽然可以使用后台线程来填充或修改模型的内容,但必须谨慎操作,因为它不能直接调用任何与模型相关的 API。相反,应将更新放入队列,并在主线程中应用。这可以通过队列连接来实现。
另请参阅 “模型类”、QAbstractItemModel 、QAbstractListModel 以及QRangeModel 。
成员函数文档
[explicit] QAbstractTableModel::QAbstractTableModel(QObject *parent = nullptr)
为给定的parent 构建一个抽象表模型。
[virtual noexcept] QAbstractTableModel::~QAbstractTableModel()
销毁抽象表模型。
[override virtual] bool QAbstractTableModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)
重写了:QAbstractItemModel::dropMimeData (const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)。
[override virtual] Qt::ItemFlags QAbstractTableModel::flags(const QModelIndex &index) const
重写了:QAbstractItemModel::flags(const QModelIndex &index) const。
[override virtual] QModelIndex QAbstractTableModel::index(int row, int column, const QModelIndex &parent = QModelIndex()) const
重写了:QAbstractItemModel::index(int row, int column, const QModelIndex &parent) const。
返回在row 和column 中,使用parent 时数据所在的索引。
另请参见 parent()。
[override virtual] QModelIndex QAbstractTableModel::sibling(int row, int column, const QModelIndex &idx) const
重写了:QAbstractItemModel::sibling(int row, int column, const QModelIndex &index) const。
© 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.