![](https://i-blog.csdnimg.cn/direct/f6434b241c3e4fae978dbdf7ef21c9b0.png)
#pragma once
#include <QAbstractTableModel>
#include <QModelIndex>
#include <QVariant>
#include <vector>
class QtTableModel : public QAbstractTableModel {
Q_OBJECT
public:
QtTableModel(QObject* parent = nullptr) : QAbstractTableModel(parent) {}
~QtTableModel();
void setData(const std::vector<std::vector<QVariant>>& data) {
beginResetModel();
this->data_ = data;
rowCount_ = data.size();
columnCount_ = !data.empty() ? data[0].size() : 0;
endResetModel();
}
int rowCount(const QModelIndex& parent = QModelIndex()) const override {
if (!parent.isValid()) {
return rowCount_;
}
return 0;
}
int columnCount(const QModelIndex& parent = QModelIndex()) const override {
if (!parent.isValid()) {
return columnCount_;
}
return 0;
}
QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override {
if (!index.isValid() || role != Qt::DisplayRole) {
return QVariant();
}
return data_[index.row()][index.column()];
}
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override {
if (role != Qt::DisplayRole) {
return QVariant();
}
if (orientation == Qt::Horizontal) {
// 返回列头数据,这里可以自定义
return QString("Column %1").arg(section + 1);
}
else {
// 返回行头数据,这里可以自定义
return QString("Row %1").arg(section + 1);
}
}
private:
std::vector<std::vector<QVariant>> data_;
int rowCount_;
int columnCount_;
};
//
//#include <QAbstractTableModel>
//#include <QVector>
//#include <QString>
//class QtTabModel : public QAbstractTableModel
//{
// Q_OBJECT
//
//public:
// //QtTabModel(QObject *parent);
// QtTabModel(QObject* parent = nullptr) : QAbstractTableModel(parent) {};
// ~QtTabModel();
// // 必须实现的方法
// int rowCount(const QModelIndex& parent = QModelIndex()) const override
// {
// Q_UNUSED(parent);
// return m_data.count();
// }
//
// int columnCount(const QModelIndex& parent = QModelIndex()) const override
// {
// Q_UNUSED(parent);
// return m_columnNames.count();
// }
//
// QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override
// {
// if (!index.isValid() || m_data.isEmpty())
// return QVariant();
//
// if (role == Qt::DisplayRole) {
// return m_data.at(index.row()).at(index.column());
// }
// return QVariant();
// }
// // 添加数据的方法
// void addRow(const QVector<QString>& row) {
// beginInsertRows(QModelIndex(), rowCount(), rowCount());
// m_data.append(row);
// endInsertRows();
// }
// // 设置列名
// void setColumnNames(const QStringList& columnNames) {
// m_columnNames = columnNames;
// }
//private:
// QVector<QVector<QString>> m_data; // 存储表格数据的二维向量
// QStringList m_columnNames; // 存储列名的列表
//};
#include "QtTabModel.h"
//QtTabModel::QtTabModel(QObject *parent)
//: QAbstractTableModel(parent)
//{}
//QtTabModel(QObject* parent = nullptr) : QAbstractTableModel(parent) {}
QtTableModel::~QtTableModel()
{}
QT使用QAbstractTableModel 0x8读取访问权限冲突 - txwtech - 博客园
QtTableModel* model;
model = new QtTableModel(); //如果未初始化,则会报错