Qt 模型视图编程之重置模型数据

news2024/11/25 8:17:45

背景

Qt 模型视图编程中模型定义了标准接口对数据进行访问,可根据需求继承对应的抽象模型类来实现自定义的数据模型。一个基本的数据模型至少要实现以下虚函数:

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

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

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

视图不会主动更新数据的显示,模型使用 dataChanged 信号通知视图数据发生变化。

模型数据重置

①.概述

通常在应用程序中用户数据不是一成不变的,经常需要对界面中的数据进行重新加载并刷新数据显示。在Qt 模型视图编程中可以对模型中的数据进行重置。

②.关键方法

beginResetModel:继承自基类 QAbstractItemModel 中的方法,在重置数据之前调用,会自动触发 modelAboutToBeReset 信号;

endResetModel:继承自基类 QAbstractItemModel 中的方法,在重置数据完成后调用,会自动触发 modelReset 信号。

重置模型数据

①.TableModelDemo.h 文件

在自定义模型中增加数据重置方法

#include <QAbstractTableModel>

struct student
{
  QString name;
  int age;
  QString sex;
};//测试用数据结构
Q_DECLARE_METATYPE(student)

class TableModelDemo : public QAbstractTableModel
{
  Q_OBJECT

public:
  TableModelDemo(QList<student> & list, QObject *parent = nullptr):QAbstractTableModel(parent),m_list(list){};
  ~TableModelDemo() {};
public:
  int rowCount(const QModelIndex &parent) const override;//
  int columnCount(const QModelIndex &parent) const override;//
  QVariant data(const QModelIndex &index,int role) const override;//
  Qt::ItemFlags flags(const QModelIndex &index)const override;//
  bool setData(const QModelIndex &index,const QVariant & value, int role = Qt::EditRole)  override;//  
private:
  QList<student> &m_list;//对内存中数据的引用
public:
  void setCustomData(QList<student> & l);//数据重置  
};

②.TableModelDemo.cpp 文件

void TableModelDemo::setCustomData(QList<student> & l)
{
  beginResetModel();//数据重置前调用
  m_list = l;//重置数据
  endResetModel();//数据重置后调用
}

③.数据模型初始化

QList<student> m_list;//全局数据

student s;
s.age = 18;
s.name = "张三";
s.sex = "男";
m_list.append(s);

s.age = 16;
s.name = "李四";
s.sex = "女";
m_list.append(s);

auto mode = new TableModelDemo(m_list);

ui.tableView->setModel(mode);

在这里插入图片描述

④.重置模型数据

connect(ui.pushButton, &QPushButton::clicked, [mode]() {
    
    student s;
    s.age = 27;
    s.name = "王五";
    s.sex = "男";
    m_list.append(s);

    mode->setCustomData(m_list);//重置数据
  });

在这里插入图片描述

使用数据更新重置数据

①.概述

当模型数据重置后行数和列数没有发生变化时,也可以通过发送数据更新信号实现重置数据。

②.使用数据更新重置数据

void TableModelDemo::setCustomData(QList<student> & l)
{
  int m_rowCount = rowCount(QModelIndex());//行数
  int m_colCount = columnCount(QModelIndex());//列数

  m_list = l;//重置数据
  
  emit dataChanged(index(0, 0), index(m_rowCount - 1, m_rowCount - 1));
}

③.重置模型数据

connect(ui.pushButton, &QPushButton::clicked, [mode]() {

    m_list[1].name = "王五";    
    mode->setCustomData(m_list);    

});

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

软件工程---习题六

4. 图6.18给出的程序流程图代表一个非结构化的程序&#xff0c;问:   &#xff08;1&#xff09;为什么说它是非结构化的&#xff1f;   答&#xff1a;通常所说的结构化程序&#xff0c;是按照狭义的结构程序的定义衡量&#xff0c;符合定义规定的程序&#xff0c;每个代码…

【操作系统】模式切换篇

CPU的模式 什么是CPU的模式&#xff1f;这和CPU的发展过程有关&#xff0c;最开始CPU是8位的&#xff0c;后来发展到16位&#xff0c;然后是32位&#xff0c;现在是64位&#xff0c;多少多少位指的是寄存器的位宽。CPU能使用的寄存器宽度以及CPU使用的指令等就构成了CPU的模式…

传统ERP管理项目有哪些问题?项目ERP系统哪个好?

8Manage FAS 是专为基于项目的公司设计的企业资源规划系统&#xff08;ERP系统&#xff09;。基于项目的公司包括建筑、工程和施工操作 (AEC)、产品要订购制造 (ETO) 和各种其他类型的专业服务公司 (PSO)。 对任何公司来说&#xff0c;无论在什么行业&#xff0c;项目对其业务…

Linux 调试之 TRACE_EVENT

文章目录前言一、TRACE_EVENT简介二、TRACE_EVENT() 结构2.1 TRACE_EVENT简介2.2 trace_sched_switch示例三、The header file参考资料前言 在Linux的整个历史中&#xff0c;人们一直希望在内核中添加静态跟踪点&#xff0c;即记录内核中特定位置的数据以供以后检索的函数。与…

[附源码]Nodejs计算机毕业设计基于大数据的超市进销存预警系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

开源大数据比对平台(dataCompare)新版本发布

开源大数据比对平台设计与实践—dataCompare 前文介绍了开源大数据比对平台设计和实践&#xff0c;最近将整体业务流程进行了完善和开发。 一、目前当前版本实现了如下功能&#xff1a; (1)低代码简单配置完成数据比对核心功能 (2)数据量级比对、数据一致性比对 二、系统功…

sentinel限流,熔断等具体流程分析

基于sentinel 1.8.6 从sentinel-dashboard来看&#xff0c;sentinel主要提供了流控&#xff0c;熔断&#xff0c;热点&#xff0c;系统规则&#xff0c;授权规则等。 针对http请求的数据监控以及规则限制的适配&#xff0c;可以参考sentinel-spring-webmvc-adapter以及sentin…

CBAM(Convolutional Block Attention Module)卷积注意力模块用法及代码实现

CBAM卷积注意力模块用法及代码实现CBAMChannel Attention模块&#xff08;CAM&#xff09;Spatial Attention模块&#xff08;SAM&#xff09;代码实现CBAM CBAM&#xff08; Convolutional Block Attention Module &#xff09;是一种轻量级注意力模块的提出于2018年。CBAM包…

185-200-spark-核心编程-Streaming

185-spark-核心编程-Streaming&#xff1a; 数据处理延迟的长短分为&#xff1a;实时数据处理&#xff08;毫秒级别&#xff09;&#xff0c;离线数据处理&#xff08;小时&#xff0c;天&#xff09; 数据处理的方式分为&#xff1a;流式数据处理&#xff08;streaming&…

ORACLE19c数据库随LINUX操作系统自动启动实现方式

1.建立目录 # su - oracle $ mkdir /home/oracle/scripts 2.建立启动脚本&#xff1a; $ cd /home/oracle/scripts $ vim startdb.sh #!/bin/bash export ORACLE_BASE/u01/app/oracle export ORACLE_HOME$ ORACLE_BASE/product/19.16.0/db_1 export ORACLE_SIDemrep export PAT…

【电脑使用】利用diskpart删除电脑的EFI分区

文章目录前言问题描述问题解决扩展&#xff1a;测量磁盘读写速度1 win10自带工具2 第三方工具前言 在Windows的磁盘管理中&#xff0c;往往会发现自己电脑的磁盘中莫名多了一些分区&#xff0c;有一些是系统分区&#xff08;一般不删&#xff09;&#xff0c;还有一些是还原分区…

m索引OFDM调制解调系统的性能仿真分析

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 随着无线通信技术的不断发展,人们对下一代移动通信系统提出了越来越高的要求。在这样的时代背景下,具有低峰均比,强频偏对抗能力和高能量效率的索引调制OFDM系统(Orthogonal Frequency Division …

【跟学C++】C++STL三大主要组件——容器/迭代器/算法(Study19)

文章目录1、前言2、简介2.1、STL是什么&#xff1f;2.2、STL能干什么&#xff1f;2.3、STL组成3、容器3.1、顺序容器3.2、排序容器(关联式容器)3.3、哈希容器3.4、容器适配器3、迭代器3.1、迭代器介绍3.2、迭代器定义方式3.3、迭代器类别3.4、辅助函数4、算法5、总结 【说明】…

【MATLAB教程案例60】使用matlab实现基于GRU网络的数据分类预测功能与仿真分析

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 目录 1.软件版本 2.GRU网络理论概述

【云原生进阶之容器】第一章Docker核心技术1.5.4节——cgroups使用

4 CGroups使用 4.1 挂载cgroup树 开始使用cgroup前需要先挂载cgroup树,下面先看看如何挂载一颗cgroup树,然后再查看其根目录下生成的文件。 #准备需要的目录 #准备需要的目录 dev@ubuntu:~$ mkdir cgroup && cd cgroup dev@ubuntu:~/cgroup$ mkdir demo#由于name=…

[论文解析] Diffusion Guided Domain Adaptation of Image Generators

project link: https://styleganfusion.github.io/ 文章目录OverviewWhat problem is addressed in the paper?What is the key to the solution?What is the main contribution?IntroductionBackgroundLatent diffusion modelClassifier-free guidanceMethodModel Structur…

pytorch深度学习实战lesson36

第三十六课 锚框 因为我们在目标检测里面需要预测边缘框&#xff0c;所以给我们的预测带来了很大的问题。我们在卷积神经网络里面做图片分类的时候&#xff0c;整个代码写起来看上去非常简单&#xff0c;就是一个 soft Max 出去就完事了。但是因为有边框的加入&#xff0c;使得…

第十二期 | 万元的正版课程仅花9.9就可买到?

顶象防御云业务安全情报中心监测发现&#xff0c;某线上教育培训类平台课件遭遇大规模盗取。被盗取的课件&#xff0c;经加工处理后&#xff0c;进行低价转售&#xff0c;严重损害了平台的合法权益。 飞速发展的在线教育和看不见的风险 随着5G、视频编解码等技术融合&#xff…

DevExpress .Net Components 22.2.3 Crack

DevExpress .Net适用于 Windows、Internet 以及您的移动世界的用户界面组件 使用适用于 WinForms、WPF、ASP.NET&#xff08;WebForms、MVC 和 Core&#xff09;、Windows 10、VCL 和 JavaScript 的 DevExpress 组件&#xff0c;打造一流的用户体验并模拟最热门的企业生产力程…

产品负责人 VS 产品经理

概述 Scrum框架创造了对新角色的需求&#xff0c;其中就包括 “产品负责人” 。这不可避免额外地导致对产品负责人和产品经理角色的误解和误用&#xff0c;对团队产生不必要的压力。 角色混淆会带来噪音和摩擦&#xff0c;削弱团队对价值、质量、速度和满意度的关注。这种混乱…