以下是一个使用QAbstractTableModel继承的MyTableModel的qml TableView例子,并实现了点击表头使用QSortFilterProxyModel实现列排序功能:
main.cpp:
```cpp
#include
#include
#include "mytablemodel.h"
#include
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
qmlRegisterType("MyTableModel", 1, 0, "MyTableModel");
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
```
mytablemodel.h:
```cpp
#ifndef MYTABLEMODEL_H
#define MYTABLEMODEL_H
#include
class MyTableModel : public QAbstractTableModel
{
Q_OBJECT
public:
explicit MyTableModel(QObject *parent = nullptr);
// QAbstractItemModel 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;
QVariant headerData(int section, Qt::Orientation orientation, 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() << "Name" << "Age" << "Gender")
<< (QList() << "Tom" << 20 << "Male")
<< (QList() << "Jerry" << 18 << "Female")
<< (QList() << "Mike" << 22 << "Male");
}
int MyTableModel::rowCount(const QModelIndex &parent) const
{
Q_UNUSED(parent)
return m_data.size();
}
int MyTableModel::columnCount(const QModelIndex &parent) const
{
Q_UNUSED(parent)
return m_data.first().