QAbstractTableModel
是 Qt 框架中的一个抽象类,用于表示表格数据模型。它提供了用于操作和访问表格数据的接口。要在 QAbstractTableModel
中设置数据,你需要继承这个类并实现一些关键的方法。
以下是一个简单的示例,展示如何在自定义的 QAbstractTableModel
中设置数据:
#include <QAbstractTableModel>
#include <QVariant>
class MyTableModel : public QAbstractTableModel {
Q_OBJECT
public:
MyTableModel(QObject *parent = nullptr) : QAbstractTableModel(parent) {}
int rowCount(const QModelIndex &parent = QModelIndex()) const override {
return 3; // 示例数据行数
}
int columnCount(const QModelIndex &parent = QModelIndex()) const override {
return 2; // 示例数据列数
}
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override {
if (!index.isValid())
return QVariant();
if (role == Qt::DisplayRole) {
// 返回示例数据
return QString("Row%1, Column%2").arg(index.row() + 1).arg(index.column() + 1);
}
return QVariant();
}
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override {
if (data(index, role) != value) {
// 设置数据
// 这里假设数据存储在一个二维数组中
// data_[index.row()][index.column()] = value.toString();
emit dataChanged(index, index, {role});
return true;
}
return false;
}
Qt::ItemFlags flags(const QModelIndex &index) const override {
if (!index.isValid())
return Qt::NoItemFlags;
return Qt::ItemIsEditable | QAbstractTableModel::flags(index);
}
private:
// 假设数据存储在一个二维数组中
// QVector<QVector<QVariant>> data_;
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QTableView view;
MyTableModel model;
view.setModel(&model);
view.show();
return app.exec();
}
setData()
方法中调用 emit dataChanged(index, index, {role})
通知视图数据已更改。setData()
和 data()
方法的索引是有效的。flags()
方法中返回 Qt::ItemIsEditable
以允许编辑。通过以上步骤和示例代码,你应该能够在 QAbstractTableModel
中成功设置数据。
云+社区技术沙龙[第17期]
企业创新在线学堂
企业创新在线学堂
企业创新在线学堂
DBTalk技术分享会
Elastic 实战工作坊
Elastic 实战工作坊
云原生正发声
腾讯云GAME-TECH沙龙
算法大赛
领取专属 10元无门槛券
手把手带您无忧上云