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

2023-11-17

背景

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

在这里插入图片描述

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt 模型视图编程之自定义只读数据模型 的相关文章

随机推荐

  • [激光原理与应用-34]:《光电检测技术-1》- 光学测量基础 - 光电检测、光学测量、作用、应用、发展趋势

    目录 第1章 光学测量概述 1 1 什么是光学检测 1 2 光学检测的重要作用 1 3 计量 1 4 测量 1 5 光学测量的特点与优点 第2章 光的测量范围与相应技术手段 2 1 光的辐射度量与光度量的测量 2 2 非光物理量的光学测量
  • PAT Basic Level 1075 链表元素分类(静态链表)

    题目链接 点击查看 题目描述 给定一个单链表 请编写程序将链表元素进行分类排列 使得所有负值元素都排在非负值元素的前面 而 0 K 区间内的元素都排在大于 K 的元素前面 但每一类内部元素的顺序是不能改变的 例如 给定链表为 18 7 4
  • 机器学习岗位面试问题汇总 之 深度学习

    自己结合网络内容总结 欢迎指正欢迎补充 最新更新 20170624 版本2 增加22 28 1 模式识别 机器学习 深度学习的区别与联系 模式识别 过去 程序 机器做智能的事 决策树等 机器学习 热点领域 给数据 学习数据 深度学习 前言领
  • C++类声明和成员函数定义

    C 类声明和成员函数定义的分离 在C 中 一般做法是将类的声明放在指定的头文件中 程序员如果想用该类 只要把有关的头文件包含进来即可 不必在程序中重复书写类的声明 以减少工 作量 提高编程的效率 由于在头文件中包含了类的声明 因此在程序中就
  • SAP BAPI_ACC_DOCUMENT_POST记账码问题

    今天遇见一个问题 使用BAPI ACC DOCUMENT POST过账 或BAPI ACC DOCUMENT CHECK检查数据 时 报错 借 贷标记不一致 刚开始以为是数据的问题 调试后发现数据的借贷平衡 金额也没有问题 联想到记账码是通
  • 互联网“香饽饽”?数据挖掘或成热门行业

    何为 数据挖掘 信息化社会的高速发展下 大数据 云计算 物联网等技术应运而生 海量的数据资源逐渐在人们的生产生活中高速地产生 积累 带动全社会迈入了大数据时代 这些代表信息的数据就好像大海 而要在广阔的大海里面找到想要的某一条信息或知识 也
  • Sqlserver2019对应驱动版本+完美解决sqlserver驱动版本问题

    我使用的是Sqlserver2019 mssql jdbc 7 4 1 jre8 jdk1 8 有时候不知道自己电脑上sqlserver对应的驱动版本 可以在idea中查看 idea会自动查找对应驱动版本的 首先 打开IDEA 点开右面的D
  • maven配置华为云镜像

    第一步 在maven的目录中找到配置文件 D softwaretools apache maven 3 5 4 conf settings xml 第二步 配置华为云服务器 在server标签下粘贴
  • springboot常用注解详解

    在springboot中 经常会用到一些注解 它们各自代表着什么呢 在这个属于我们的节日里 快来了解一下吧 1 SpringBootApplication 一般不会主动去使用它 但是要知道它是一个组合注解 Configuration Ena
  • java-php-python-ssm校园统一网络授课平台系统计算机毕业设计

    java php python ssm校园统一网络授课平台系统计算机毕业设计 java php python ssm校园统一网络授课平台系统计算机毕业设计 本源码技术栈 项目架构 B S架构 开发语言 Java语言 开发软件 idea ec
  • benchmarking graph neural networks 翻译

    摘要 图神经网络 GNN 已成为分析和学习图数据的标准工具包 随着领域的发展 确定关键架构并验证可推广到更大 更复杂的数据集的新思路变得至关重要 不幸的是 在缺乏具有一致实验设置的标准化基准的情况下 评估新模型的有效性变得越来越困难 在本文
  • 【DLL】【一文搞懂】【学习笔记】(四)GetProcAddress函数

    官方文档 GetProcAddress 函数用于获取DLL中导出函数的地址 显式链接时使用 GetProcAddress将 DLL 模块处理 由LoadLibrary 或 GetModuleHandle 返回的参数 并采用要调用的函数的名称
  • 第四章 Verilog 逻辑设计介绍

    第四章 Verilog 逻辑设计介绍 4 1 组合逻辑的结构化模型 介绍了verilog 原语 即一些基本的逻辑门 例化时不必写例华名 介绍了verilog module 的结构 4 2 逻辑系统的验证和测试方法 四值逻辑 0 1 x z
  • 用MD5实现hash长度扩展攻击 By Assassin

    今天心血来潮 看到了扩展攻击 猛然想到了之前看的扩展攻击的原理还没有弄懂 这里补充一下 hash长度扩展攻击到底是怎么实现的 题目 首先从实验吧上面见到的经典的题目 下面给出源码
  • Python Flask+Echarts+sklearn+MySQL(评论情感分析、用户推荐、BI报表)项目分享

    Python Flask Echarts sklearn MySQL 评论情感分析 用户推荐 BI报表 项目分享 项目背景 随着互联网的快速发展和智能手机的普及 人们越来越倾向于在网上查找餐厅 购物中心 酒店和旅游景点等商户的点评和评分信息
  • 掌握 Ajax,第 5 部分:操纵 DOM

    Brett McLaughlin 作者 编辑 O Reilly Media Inc 2006 年 4 月 27 日 如果阅读过本系列的 上一篇文章 那么您就非常清楚当 Web 浏览器显示网页时幕后发生的一切了 前面已经提到 当 HTML 或
  • 实验室云平台架构学习笔记

    这些日子学习了实验室云平台的体系架构 在多次与小孟哥请教后对该架构有了一定了解 首先应明白建立云平台的目的 与传统的服务器相比 云平台可以将物理资源虚拟化为虚拟机资源池 灵活调用软硬件资源 实现对用户的按需访问 而且在运行过程中根据用户并发
  • LeetCode刷题笔记-压缩字符串

    压缩字符串 给你一个字符数组 chars 请使用下述算法压缩 从一个空字符串 s 开始 对于 chars 中的每组 连续重复字符 如果这一组长度为 1 则将字符追加到 s 中 否则 需要向 s 追加字符 后跟这一组的长度 压缩后得到的字符串
  • 10个程序员常用的代码简写技术,看懂一种是入门,全懂就是大神

    今天小编我给大家整理了一份10个程序员常用的代码简写技术 看懂一种是入门 全懂就是大神 你能知道几个呢 这篇文章分享之前我还是要推荐下我自己的前端群 595549645 不管你是小白还是大牛 小编我都挺欢迎 不定期分享干货 包括我自己整理的
  • Qt 模型视图编程之自定义只读数据模型

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