如果你想要对QAbstractTableModel进行排序,可以使用QSortFilterProxyModel类。这个类可以作为一个中间层,将原始的model数据按照指定的规则进行排序或过滤,并将结果传递给TableView进行显示。
下面是一个示例代码,演示如何使用QSortFilterProxyModel对QAbstractTableModel进行排序:
MyTableModel.h:
```cpp
#ifndef MYTABLEMODEL_H
#define MYTABLEMODEL_H
#include
class MyTableModel : public QAbstractTableModel
{
Q_OBJECT
public:
explicit MyTableModel(QObject *parent = nullptr);
// QAbstractTableModel interface
public:
int rowCount(const QModelIndex &parent) const override;
int columnCount(const QModelIndex &parent) const override;
QVariant data(const QModelIndex &index, int role) const override;
bool setData(const QModelIndex &index, const QVariant &value, int role) override;
Qt::ItemFlags flags(const QModelIndex &index) const override;
private:
QList> m_data;
};
#endif // MYTABLEMODEL_H
```
MyTableModel.cpp:
```cpp
#include "MyTableModel.h"
MyTableModel::MyTableModel(QObject *parent)
: QAbstractTableModel(parent)
{
// 初始化数据
m_data << (QList() << "John" << "Doe" << 30 << "Male")
<< (QList() << "Jane" << "Doe" << 25 << "Female")
<< (QList() << "Bob" << "Smith" << 45 << "Male")
<< (QList() << "Alice" << "Johnson" << 50 << "Female");
}
int MyTableModel::rowCount(const QModelIndex &parent) const
{
Q_UNUSED(parent);
return m_data.count();
}
int MyTableModel::columnCount(const QModelIndex &parent) const
{
Q_UNUSED(parent);
return 4;
}
QVariant MyTableModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
if (role == Qt::DisplayRole || role == Qt::EditRole)
return m_data[index.row()][index.column()];
return QVariant();
}
bool MyTableModel::setData(const QModelIndex &index, const QVariant &value, int role