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

news2024/11/19 6:15:28

背景

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);

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/82262.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Java Web技术的动车购票系统

毕 业 设 计 中文题目基于Java Web技术的动车购票系统英文题目Train ticket system based on Web JavaTechnology毕业设计诚信声明书 本人郑重声明:在毕业设计工作中严格遵守学校有关规定,恪守学术规范;我所提交的毕业设计是本人在 指导教师…

零入门容器云网络-7:基于golang编程实现给ns网络命名空间添加额外的网卡

已发表的技术专栏(订阅即可观看所有专栏) 0  grpc-go、protobuf、multus-cni 技术专栏 总入口 1  grpc-go 源码剖析与实战  文章目录 2  Protobuf介绍与实战 图文专栏  文章目录 3  multus-cni   文章目录(k8s多网络实现方案) 4  gr…

“美亚杯”第三届中国电子数据取证大赛答案解析(个人赛)

试题 1 Gary的笔记本电脑已成功取证并制作成镜像 (Forensic Image),下列哪个是其MD5哈希值。 A. 0CFB3A0BB016165F1BDEB87EE9F710C9 B. 5F1BDEB87EE9F710C90CFB3A0BB01616 C. A0BB016160CFB3A0BB0161661670CFB3 D. 16160CFB3A0BB016166A0BB0161661…

独立产品灵感周刊 DecoHack #041 - 那些独立开发者是怎么养活自己的

本周刊记录有趣好玩的独立产品设计开发相关内容,每周发布,往期内容同样精彩,感兴趣的伙伴可以点击订阅我的周刊。为保证每期都能收到,建议邮件订阅。欢迎通过 Twitter 私信推荐或投稿。 💻 产品推荐 1. SOCCER STREAM…

分布式的设计思想

一、分布式设计基础 传统架构问题 ① 单机资源不足 存储:3台机器,每台机器都有2T的硬盘空间,但是现在有1个3T的文件要存储计算:3台机器,每台机器都有8核CPU和8GB内存,但是现在有1个程序需要12核CPU和24G…

启明智显分享| Sigmastar SSD212 SPI+RGB点屏示例(2.1寸 480*480圆屏,可应用于旋钮)

SSD20X 点SPIRGB屏和SSD212 类似,区别在于对应文件名不同、SSD20X没有config.ini文件。 SSD20X SPI初始化文件:vi boot/common/cmd_customer_init.c SSD20X由于没有config.ini 可以用jpeg2disp 中.h 屏参头文件的方式实现显示logo。 这里以SSD212 点屏为…

Java——AVL树

平衡二叉树 在之前的blog中讲到,平衡二叉树是一棵树,任意一个节点的左树的所有节点都小于这个节点,右树的所有节点都大于这个节点 因此,可以利用这个性质来中序遍历,就可以得到一个有序的序列,而如果我们要…

谷歌地图商家抓取工具 G-Business Extractor 7.5

G 业务提取器 | 谷歌地图抓取工具 G-Business Extractor是一款功能强大的工具,可帮助您从 Google 地图中寻找商机。它是最好的Google Maps Scraper工具,能够从最重要的企业目录中提取数据。 Google 地图是一个来源,您可以在其中找到按类别和位…

“美亚杯”第三届中国电子数据取证大赛答案解析(团体赛)

Questions Gary被逮捕后,其计算机被没收并送至计算机取证实验室。经调查后,执法机关再逮捕一名疑犯Eric,并检取其家中计算机(window 8), 并而根据其家中计算机纪录, 执法机关再于其他地方取得一台与案有关的服务器,而该服务器内含四个硬盘。该服务器是运…

跨端开发浪潮中的变与不变

自 90 年代初开启 PC 时代以来,随着移动网络的快速普及,在 2010 年左右,进入移动时代、IOT 时代,各种移动互联设备不断涌现,除了最常见的 PC、Pad、智能手机外,它还可能是小小的一块智能手表,也…

NKOJ P9492 【USACO】视频共享

题目分析 这道题其实最容易想到的方法是离线枚举,但是其时间复杂度为,很明显会超时(这题数据连离线化都救不了) 那该如何办? 并查集;因为他说有一个推荐列表,而这个推荐列表中i号视频推荐了j号视频&#…

SpringSecurity+OAuth2.0+JWT实现单点登录应用

SpringSecurityOAuth2.0JWT实现单点登录应用 gitee项目练习地址:https://gitee.com/xzq25_com/springsecurity.oauth2 OAuth2.0单点登录实践一、搭建OAuth授权服务器,采用授权码模式JWT令牌二、创建服务client:SSOA、SSOB 并进行测试一、搭建…

【云计算与大数据技术】大数据系统总体架构概述(Hadoop+MapReduce )

一、总体架构设计原则 企业级大数据应用框架需要满足业务的需求,一是要求能够满足基于数据容量大,数据类型多,数据流通快的大数据基本处理需求,能够支持大数据的采集,存储,处理和分析,二是要能…

openGauss数据库的使用

目录前言1. 启动/停止/重启数据库(1)极简版启动/停止/重启命令(2)企业版启动/停止/重启命令2. 登录数据库(1)登录数据库时的基本连接参数(2)登录数据库时的常用连接参数(…

如何使用轻量应用服务器搭建高颜值的YesPlayMusic网易云播放器

本文介绍了如何使用腾讯云的Lighthouse轻量应用服务器来搭建一个高颜值的第三方网易云播放器。 ​ 项目简介 本文使用的是YesPlayMusic项目,这是一款高颜值的第三方网易云播放器,它完全可以作为网易云官方应用的替代品。而且还拥有一些网易云官方应用没…

react-dnd 拖拽能力教程

前言 近几年来,低代码、零代码的热度在国内逐年递增。“复杂度同力一样不会消失,也不会凭空产生,它总是从一个物体转移到另一个物体或一种形式转为另一种形式”。用户在使用低零代码构建应用程序时,这些能力只是被平台研发人员提…

SQL SERVER 2019卸载和安装

卸载过程删除SQL Server2019包括sql server这个数据库和它的管理工具SQLServer Management Studio以及他们的注册表信息和安装的目录,以上,最重要的是一定要有耐心,一步一步慢慢来。 首先打开一定要把SQL的服务都关掉,这个很重要…

压缩包文件如何设置加密、删除加密?

压缩包是将文件压缩成RAR、ZIP格式文件,将文件压缩成压缩包之后,就更方便转发以及保存,而且压缩包文件可以进行加密,这样也能够起到对文件的保护作用,今天和大家分享如何对压缩包进行加密以及如何删除压缩包密码。 压…

战略,就没一本好书

战略这个词被工商业界引爆,都是1965年的事。想来到现在已经快60年了。但是实话说,战略这么重要的事,其实没几本好书,也就是说,这个领域,实在没什么有效的研究成果。(1)起点1965年是个…

Vue 进阶二 | 系统性学习 | 无知的我费曼笔记

无知的我正在复盘Vue 该笔记特点是 重新整理了涉及资料的一些语言描述、排版而使用了自己的描述对一些地方做了补充说明。比如解释专有名词、类比说明、对比说明、注意事项提升了总结归纳性。尽可能在每个知识点上都使用一句话 || 关键词概括更注重在实际上怎么应用提出并回答…