【Qt】在表格QTableWidget或者QTableView中,当主键Id存在时更新数据,不存在时添加数据解决方案

问题

有时在开发中,表格需要显示数据,每一行呢,需要记录对应的id。
当更新表格数据时,会根据id进行更新,id存在就更新行数据,不存在就添加一行新数据。

解决方案

如何知道id存在还是不存在呢?如果每次都获取表格的全部数据进行查找,虽然功能可以实现,但未免效率有些低。
因为id是唯一的,所以可以选择一个中间结构,添加Map数据结构,这样查找起来就会很方便。
.h

QMap<QString, QStandardItem*>   m_mapItem; // 记录已存在的数据

.cpp

// 首先,初始化数据qsrand(0); // 随机数QStandardItemModel* pModel = new QStandardItemModel;for(int i = 0; i < 5; ++i){QString strId = QString("uuid_%1").arg(i);pModel->setItem(i, 0, new QStandardItem(strId));pModel->setItem(i, 1, new QStandardItem(QString("%1_%2").arg(QString::number(i), QString::number(1))));pModel->setItem(i, 2, new QStandardItem(QString("%1_%2").arg(QString::number(i), QString::number(2))));pModel->setItem(i, 3, new QStandardItem(QString("%1_%2").arg(QString::number(i), QString::number(3))));// 将数据添加到容器中m_mapItem.insert(strId, pModel->item(i, 0));}ui->tableView->setModel(pModel);// 添加或者更新数据,当id存在更新,当id不存在时添加数据QStandardItemModel* pModel = static_cast<QStandardItemModel*>(ui->tableView->model());int n = qrand()%100 +1;QString strUuid = QString("uuid_%1").arg(n);if(m_mapItem.contains(strUuid)) // 查找,存在就更新{QStandardItem* pItem = m_mapItem.value(strUuid);int nRow = pItem->row();pModel->setItem(nRow, 1, new QStandardItem(QString("%1_%2").arg(QString::number(nRow), QString::number(n))));pModel->setItem(nRow, 2, new QStandardItem(QString("%1_%2").arg(QString::number(nRow), QString::number(n))));pModel->setItem(nRow, 3, new QStandardItem(QString("%1_%2").arg(QString::number(nRow), QString::number(n))));return;}// 不存在就添加int nRowCount = pModel->rowCount();pModel->insertRow(nRowCount);pModel->setItem(nRowCount, 0, new QStandardItem(QString("%1").arg(strUuid)));pModel->setItem(nRowCount, 1, new QStandardItem(QString("%1_%2").arg(QString::number(nRowCount), QString::number(n))));pModel->setItem(nRowCount, 2, new QStandardItem(QString("%1_%2").arg(QString::number(nRowCount), QString::number(n))));pModel->setItem(nRowCount, 3, new QStandardItem(QString("%1_%2").arg(QString::number(nRowCount), QString::number(n))));m_mapItem.insert(strUuid, pModel->item(nRowCount, 0));// 更新第一行数据QStandardItemModel* pModel = static_cast<QStandardItemModel*>(ui->tableView->model());int n = qrand()%100 +1;QString strUuid = QString("uuid_%1").arg(0);if(m_mapItem.contains(strUuid)){QStandardItem* pItem = m_mapItem.value(strUuid);int nRow = pItem->row();pModel->setItem(nRow, 1, new QStandardItem(QString("%1_%2").arg(QString::number(nRow), QString::number(n))));pModel->setItem(nRow, 2, new QStandardItem(QString("%1_%2").arg(QString::number(nRow), QString::number(n))));pModel->setItem(nRow, 3, new QStandardItem(QString("%1_%2").arg(QString::number(nRow), QString::number(n))));return;}int nRowCount = pModel->rowCount();pModel->insertRow(nRowCount);pModel->setItem(nRowCount, 0, new QStandardItem(QString("%1").arg(strUuid)));pModel->setItem(nRowCount, 1, new QStandardItem(QString("%1_%2").arg(QString::number(nRowCount), QString::number(n))));pModel->setItem(nRowCount, 2, new QStandardItem(QString("%1_%2").arg(QString::number(nRowCount), QString::number(n))));pModel->setItem(nRowCount, 3, new QStandardItem(QString("%1_%2").arg(QString::number(nRowCount), QString::number(n))));

效果

默认ui:
在这里插入图片描述
当改变第一行数据时:
在这里插入图片描述
当更新或者添加数据时:
在这里插入图片描述
如此,问题解决。

结论

对于今天解决不了的事情,也不必着急。因为明天还是解决不了

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

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

相关文章

记一次CDH集群迁移产生的问题——HIVE

背景 生产环境CDH集群迁移到新的环境&#xff0c;迁移之后使用Hive Client方执行任务一直失败。 问题1&#xff1a;metadata.SessionHiveMetaStoreClient 产生报错&#xff1a; FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.Ru…

AOP操作日志记录

AOP操作日志记录 1.创建注解 Retention(RetentionPolicy.RUNTIME) Target(ElementType.METHOD) public interface PassportLog {String operatePage();String operateType();ClassTypEnum classType();}2.创建切面 对于字典&#xff0c;可以通过注解属性去转换&#xff0c;枚举…

车联网架构设计(二)_消息缓存

在上一篇博客车联网架构设计(一)_消息平台的搭建-CSDN博客中&#xff0c;我介绍了车联网平台需要实现的一些功能&#xff0c;并介绍了如何用EMQXHAPROXY来搭建一个MQTT消息平台。车联网平台的应用需要消费车辆发布的消息&#xff0c;同时也会下发消息给车辆&#xff0c;以实现车…

SpringBoot 属性配置解析

属性配置介绍 spring官方提供的17中属性配置的方式 Devtools全局配置测试环境TestPropertySource注解测试环境properties属性命令行参数SPRING_APPLICATION_JSON属性ServletConfig初始化参数ServletContext初始化参数JNDI属性JAVA系统属性操作系统环境变量RandomValueProperty…

解释区块链技术的应用场景和优势。

区块链技术的应用场景&#xff1a; 金融行业&#xff1a;区块链可用于加强支付、结算、借贷和保险等金融业务的安全性和效率。 物流行业&#xff1a;区块链可用于追踪物流信息&#xff0c;保证货物的安全、可靠和透明。 版权保护&#xff1a;区块链可用于储存数字资产和版权信…

Nacos和Eureka冲突问题原因分析

目录 一、问题现象二、解决办法三、原因分析 一、问题现象 Description:Field autoServiceRegistration in org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration required a single bean, but 2 were found:- eurekaAutoServiceRegis…

单例模式【C#】

只能生一个儿子。 文件操作只能一个单例去操作。 1static&#xff1a; static的特点是&#xff0c;不需要new就能使用。即使派生了&#xff0c;也是使用静态的对象。 public class SingleObject {//创建 SingleObject 的一个对象private static SingleObject instance new…

基于OpenCV+CNN+IOT+微信小程序智能果实采摘指导系统——深度学习算法应用(含pytho、JS工程源码)+数据集+模型(二)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境TensorFlow 环境Jupyter Notebook环境Pycharm 环境微信开发者工具OneNET云平台 相关其它博客工程源代码下载其它资料下载 前言 本项目基于Keras框架&#xff0c;引入CNN进行模型训练&#xff0c;采用Dropout梯度…

spark log4j日志配置

1.spark启动参数 先把log4j配置文件放到hdfs&#xff1a;hdfs://R2/projects/log4j-debug.properties --conf spark.yarn.dist.fileshdfs://R2/projects/log4j-debug.properties#log4j-first.properties \ --conf "spark.driver.extraJavaOptions-Dlog4j.configurationf…

【前端设计模式】之单例模式

在前端开发中&#xff0c;单例模式是一种常见的设计模式&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供全局访问点。在实现单例模式时&#xff0c;有一些最佳实践和高级技巧可以帮助我们编写更优雅和可维护的代码。 1. 使用闭包 使用闭包是实现单例模式的一种常见…

uni-app 设置tabBar的setTabBarBadge购物车/消息等角标

目录 一、效果二、代码实现二、全部代码1.index.vue2.cart.vue 三、真实案例参考最后 一、效果 二、代码实现 只要使用uni.setTabBarBadge和uni.removeTabBarBadge来进行对红点的设置和移除。 主要代码&#xff1a; //设置红点 uni.setTabBarBadge({index: 1, // 底部菜单栏…

大数据可视化项目——基于Python豆瓣电影数据可视化分析系统的设计与实现

大数据可视化项目——基于Python豆瓣电影数据可视化分析系统的设计与实现 本项目旨在通过对豆瓣电影数据进行综合分析与可视化展示&#xff0c;构建一个基于Python的大数据可视化系统。通过数据爬取收集、清洗、分析豆瓣电影数据&#xff0c;我们提供了一个全面的电影信息平台…

Python自动化——driver.execute_script的用法

用法引入 当您使用Selenium时&#xff0c;您可以指定chrome驱动程序的路径。以下是一个完整的示例&#xff0c;包括指定Chrome驱动程序的路径&#xff1a; from selenium import webdriver# 指定Chrome驱动程序的路径 chrome_driver_path C:/path/to/your/chromedriver.exe …

2-Django、Flask和Tornado三大主流框架对比

在Python的web开发框架中&#xff0c;目前使用量最高的几个是Django、Flask和Tornado&#xff0c; 经常会有人拿这几个对比&#xff0c;相信大家的初步印象应该是 Django大而全、Flask小而精、Tornado性能高。 了解常用框架 Django 主要特点是大而全,集成了很多组件,例如: Mo…

instanceof原理解析

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。 ​ 语法 object instanceof Constructorobject //某个实例对象 Constructor //某个构造函数实例验证 验证的过程中会使用Object.getPrototypeOf(Object)&#xff0c;Object.getProtot…

论文阅读[2023ICME]Edge-FVV: Free Viewpoint Video Streaming by Learning at the Edge

Edge-FVV: Free Viewpoint Video Streaming by Learning at the Edge 会议信息&#xff1a; Published in: 2023 IEEE International Conference on Multimedia and Expo (ICME) 作者&#xff1a; 1 背景 FVV允许观众从多个角度观看视频&#xff0c;但是如果所选视点的视频…

机器学习-逻辑回归

一、引言 逻辑回归&#xff08;Logistic Regression&#xff09;是一种广泛应用于分类问题的监督学习算法。尽管名字中含有“回归”二字&#xff0c;但这并不意味着它用于解决回归问题。相反&#xff0c;逻辑回归专注于解决二元或多元分类问题&#xff0c;如邮件是垃圾邮件还是…

vue2+typescript使用高德地图2.0版本

高德地图 webjs api 2.0官网教程 AMap.Driving使用说明 <div class"mmp"><div id"map" ref"mapcontainer"></div></div><script lang"ts"> //安全密钥 window._AMapSecurityConfig{securityJsCode: &qu…

ExoPlayer架构详解与源码分析(10)——H264Reader

系列文章目录 ExoPlayer架构详解与源码分析&#xff08;1&#xff09;——前言 ExoPlayer架构详解与源码分析&#xff08;2&#xff09;——Player ExoPlayer架构详解与源码分析&#xff08;3&#xff09;——Timeline ExoPlayer架构详解与源码分析&#xff08;4&#xff09;—…

数据结构初阶之二叉树性质练习与代码练习

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 Linux 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力,共赴大厂。 目录 1.前言 2.性质练习 3…