Qt中abstracttablemodel怎么使用

avatar
作者
筋斗云
阅读量: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()显示表格窗口。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!