源码解析6-系统封装-QTableView实现

Qt源码解析 索引

源码解析6-系统封装-QTableView实现源码

一个简单的模型/视图应用程序

如果你想开发一个模型/视图应用程序,你应该从哪里开始?我们建议从一个简单的示例开始,然后逐步扩展它。这使得理解架构变得容易得多。事实证明,在调用 IDE 之前尝试详细了解模型/视图体系结构对许多开发人员来说不太方便。从具有演示数据的简单模型/视图应用程序着手要容易得多。试试看!只需将以下示例中的数据替换为您自己的即可。

下面是 7 个非常简单且独立的应用程序,它们展示了模型/视图编程的不同方面。源代码可以在examples/widgets/tutorials/modelview目录中找到。

我们从一个使用QTableView来显示数据的应用程序开始。稍后我们将添加编辑功能。

(文件来源:examples/widgets/tutorials/modelview/1_readonly/main.cpp)

 // main.cpp
  #include <QApplication>
  #include <QTableView>
  #include "mymodel.h"

  int main(int argc, char *argv[])
  {
      QApplication a(argc, argv);
      QTableView tableView;
      MyModel myModel;
      tableView.setModel(&myModel);
      tableView.show();
      return a.exec();
  }

我们有通常的main()函数:

这是有趣的部分:我们创建 MyModel 的实例并使用tableView.setModel(&myModel); 将它的指针传递给tableView。tableView将调用它收到的指针的方法来找出两件事:

  • 应显示多少行和列。
  • 每个单元格应该打印什么内容。

该模型需要一些代码来对此做出响应。

我们有一个表数据集,所以让我们从QAbstractTableModel开始,因为它比更通用的QAbstractItemModel更容易使用。

(文件来源:examples/widgets/tutorials/modelview/1_readonly/mymodel.h)


  // mymodel.h
  #include <QAbstractTableModel>

  class MyModel : public QAbstractTableModel
  {
      Q_OBJECT
  public:
      MyModel(QObject *parent = nullptr);
      int rowCount(const QModelIndex &parent = QModelIndex()) const override;
      int columnCount(const QModelIndex &parent = QModelIndex()) const override;
      QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
  };

QAbstractTableModel需要实现三个抽象方法。

(文件来源:examples/widgets/tutorials/modelview/1_readonly/mymodel.cpp)

 // mymodel.cpp
  #include "mymodel.h"

  MyModel::MyModel(QObject *parent)
      : QAbstractTableModel(parent)
  {
  }

  int MyModel::rowCount(const QModelIndex & /*parent*/) const
  {
     return 2;
  }

  int MyModel::columnCount(const QModelIndex & /*parent*/) const
  {
      return 3;
  }

  QVariant 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道格拉斯范朋克

播种花生牛奶自留田

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值