Qt 模型视图编程之自定义只读数据模型

背景

Qt 中的模型视图架构是用来实现大量数据的存储、处理及其显示的,主要原理是将数据的存储与显示分离:模型定义了标准接口对数据进行访问;视图通过标准接口获取数据并定义显示方式;模型使用信号与槽机制通知视图数据变化。

QModelIndex 是实现数据的表示与数据的获取相分离的关键机制,模型中的数据约定使用唯一的索引来访问。

Qt::ItemDataRole 为数据项参数的索引,为数据项在不同情况下的数据进行标记,在获取数据项的数据时必须指定项角色。

抽象数据模型

Qt 提供了 3 类抽象数据模型:

①.QAbstractItemModel:项模型,所有数据模型的基类,可用于构建复杂的数据模型;

②.QAbstractListModel:列表模型;

③.QAbstractTableModel:表格模型。

要实现自定义的数据模型,可根据需求继承对应的抽象类,并重新实现需要的虚函数即可。

自定义数据模型

①.概念

视图通过模型定义的接口进行数据显示,因此一个数据模型至少需要提供以下接口:

一是数据的大小,即显示几行几列;二是数据的显示,即每个单元格要显示的内容。

②.要实现的虚函数

自定义一个数据模型,至少要实现以下虚函数:

rowCount:行数,返回要显示多少行;

columnCount:列数,返回要显示多少列

data:读取数据,返回每个单元格要显示的内容

只读数据模型

以 QAbstractTableModel 为例实现一个自定义数据模型,代码如下:

①.TableModelDemo.h 文件

class TableModelDemo : public QAbstractTableModel
{
  Q_OBJECT

public:
  TableModelDemo(QObject *parent = nullptr);
  ~TableModelDemo();
protected:
  virtual int rowCount(const QModelIndex &parent) const override;//
  virtual int columnCount(const QModelIndex &parent) const override;//
  virtual QVariant data(const QModelIndex &index,int role) const override;//
};

②.TableModelDemo.cpp 文件

int TableModelDemo::rowCount(const QModelIndex &parent) const
{
  return 2;
}

int TableModelDemo::columnCount(const QModelIndex &parent) const
{
  return 2;
}

QVariant TableModelDemo::data(const QModelIndex &index, int role) const
{
  switch (role)
  {
  case Qt::DisplayRole:
    return QString("%1-%2").arg(index.row()).arg(index.column());
    break;
  default:
    return QVariant();
    break;
  }
}

③.使用自定义模型

auto mode = new TableModelDemo();
ui.tableView->setModel(mode);

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本课程详细、全面地介绍了 Qt 开发中的各个技术细节,并且额外赠送在嵌入式端编写Qt程序的技巧。整个课程涵盖知识点非常多,知识模块囊括 Qt-Core 组件、QWidgets、多媒体、网络、绘图、数据库,超过200个 C++ 类的分析和使用,学完之后将拥有 Qt 图形界面开发的非常坚实的功底。 每个知识点不仅仅会通过视频讲解清楚,并且会配以精心安排的实验和作业,用来保证学习过程中切实掌握核心技术和概念,通过实验来巩固,通过实验来检验,实验与作业的目的是发现问题,发现技术盲点,通过答疑和沟通夯实技术技能。注意:本套视频教程来源于线下的实体班级,因此视频中有少量场景对话和学生问答,对此比较介意的亲们谨慎购买。注意:本套视频教程包含大量课堂源码,包含对应每个知识点的精心编排的作业。由于CSDN官方规定在课程介绍中不能出现作者的联系方式,因此在这里无法直接给出QQ答疑号,视频中的源码、资料和作业文档链接统一在购买后从CSDN平台跟我沟通,我会及时回复跟进。注意:本套视频教程包含全套10套作业题,覆盖所有视频知识点,循序渐进,各个击破,作业总纲如下:下面是部分作业题目展示,每道题都有知识点说明,是检验学习效果的一大利器:(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)…… ……

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值