QAbstractTableModel 类
QAbstractTableModel类提供了一个抽象模型,可以通过子类化创建表模型。
Header: | #include < QAbstractTableModel > |
---|---|
qmake: | QT += core |
Inherits: | QAbstractItemModel |
Inherited By: | QSqlQueryModel, |
详述
QAbstractTableModel为模型提供了一个标准接口,该模型将其数据表示为一个二维的项数组。它不直接使用,但必须被子类化。
由于该模型提供了一个比QAbstractItemModel更专门化的接口,所以它不适合与树视图一起使用,尽管它可以用于向QListView提供数据。如果您需要表示一个简单的项目列表,并且只需要一个模型来包含一列数据,那么子类化QAbstractListModel可能更合适。
rowCount()和columnCount()函数返回表的维数。要检索与模型中的项对应的模型索引,请使用index()并仅提供行号和列号。
子类化
在子类化QAbstractTableModel时,必须实现rowCount()、columnCount()和data()。索引()和父()函数的默认实现是由QAbstractTableModel提供的。行为良好的模型还将实现headerData()。
可编辑模型需要实现setData(),并实现flags()来返回包含Qt::ItemIsEditable的值。
为可调整大小的数据结构提供接口的模型可以提供insertRows()、removeRows()、insertColumns()和removeColumns()的实现。当实现这些函数时,调用适当的函数是很重要的,这样所有连接的视图都能意识到任何变化:
- insertRows()实现必须在向数据结构中插入新行之前调用beginInsertRows(),之后必须立即调用endInsertRows()。
insertColumns()实现必须在将新列插入数据结构之前调用beginInsertColumns(),并且必须在插入后立即调用endInsertColumns()。 - removeRows()实现必须在从数据结构中删除行之前调用beginRemoveRows(),它必须在随后立即调用endRemoveRows()。
- removeColumns()实现必须在列从数据结构中删除之前调用beginRemoveColumns(),并且必须在之后立即调用endRemoveColumns()。
注意:在模型子类化参考中有一些关于模型子类化的一般指南。
参见模型类、QAbstractItemModel、QAbstractListModel和Pixelator示例。
公共函数
- 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
总结
如果自定义表格模型,那么继承这个类。