阅读量:0
在Qt中使用QAbstractTableModel
需要继承该类,并实现一些必要的函数来定义数据模型。以下是一个简单的示例:
#include <QAbstractTableModel> #include <QVariant> class MyTableModel : public QAbstractTableModel { public: MyTableModel(QObject *parent = nullptr) : QAbstractTableModel(parent) { // 初始化数据 m_data = {{"John", 28}, {"Amy", 34}, {"Michael", 42}}; } // 返回行数 int rowCount(const QModelIndex &parent = QModelIndex()) const override { Q_UNUSED(parent); return m_data.size(); } // 返回列数 int columnCount(const QModelIndex &parent = QModelIndex()) const override { Q_UNUSED(parent); return 2; } // 返回数据 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override { if (!index.isValid()) return QVariant(); if (role == Qt::DisplayRole || role == Qt::EditRole) { if (index.column() == 0) return m_data[index.row()].first; else if (index.column() == 1) return m_data[index.row()].second; } return QVariant(); } // 设置数据 bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override { if (index.isValid() && role == Qt::EditRole) { if (index.column() == 0) m_data[index.row()].first = value.toString(); else if (index.column() == 1) m_data[index.row()].second = value.toInt(); emit dataChanged(index, index, {role}); return true; } return false; } // 返回表头数据 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override { if (role == Qt::DisplayRole && orientation == Qt::Horizontal) { if (section == 0) return "Name"; else if (section == 1) return "Age"; } return QVariant(); } private: // 存储数据的容器 QVector<QPair<QString, int>> m_data; };
在上述示例中,MyTableModel
继承自QAbstractTableModel
类,并实现以下函数:
rowCount()
:返回行数。columnCount()
:返回列数。data()
:返回指定索引位置的数据。setData()
:设置指定索引位置的数据。headerData()
:返回表头数据。
你可以根据自己的需求修改这些函数的实现。创建MyTableModel
的实例后,可以将其与QTableView
关联,这样可以实现将数据显示在表格中。例如:
#include <QApplication> #include <QTableView> int main(int argc, char *argv[]) { QApplication a(argc, argv); MyTableModel model; QTableView tableView; tableView.setModel(&model); tableView.show(); return a.exec(); }
这个示例创建了一个QTableView
对象,并将其与MyTableModel
关联起来。最后,通过tableView.show()
显示表格窗口。