[C++ QT项目实战]----系统实现双击表格某一行,表格数据不再更新,可以查看该行所有信息,选中表更新之后,数据可以继续更新

前言

        在需要庞大的数据量的系统中,基于合适的功能对数据进行观察和使用至关重要,本篇在自己项目实战的基础上,基于C++ QT编程语言,对其中一个数据功能进行分析和代码实现,希望可以有所帮助。一些特殊原因,图片有些内容无法展示,原理不变。

正文

01-功能演示

        首先要在QT设计器中添加控件和表格,如下图所示,将控件放在合适的位置,然后选择合适的方法进行布局即可,操作比较简单。

        如下图所示,运行之后,数据库还没有与表格中表头对应的参数名称进行匹配。但是表头中参数名称都是与下方控件一一对应的,这样才能保证选中时,可以在下方控件中查看所有信息。

         如下图所示,这是数据匹配之后的结果,可以看出,该系统中,数据一直在更新,如果不去选择某一条,下方控件显示的一直是最新的一组数据,并且控件中的表更新按钮是选中的,也就是会一直更新。

         如下图所示,当对某一条选中时,比如选中第5组数据,蓝色框线选中,此时,这一组的数据都会在下方对应控件中显示,意思就是如果表格中的表头名称是生产时间,那么对应数据可以显示在下方生产时间对应控件中。一一对应,清晰明了。

         当然,对数据观察结束之后,不能一直处于这个状态,此时,点击表更新旁边的方框,使其处于选中状态,表格便会继续更新,而下方控件显示的数据也会重新变成最新一组数据。

         至此,功能演示结束,下面是如何通过代码实现,分成两部分解释。

02-双击事件实现

        具体代码如下,解释如下:

  在QT中提供了用于实现双击事件的信号函数,doubleClicked(QModelIndex)通常用于与视图类(如QTreeView、QListView、QTableView等)相关联的槽函数。在用户双击视图中的某个项目时,该信号就会被发射。

        使用方法:

1、连接信号与槽函数
connect(ui->cgl_tblWidget, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(double_selected_action(QModelIndex)));	

        这里cgl_tblWidget是表格名称,this是槽函数所属的对象,double_selected_action是要处理双击事件的槽函数。

​​​​​​​2、定义槽函数​​​​​​​​​​​​​​
void MainWindow::double_selected_action(const QModelIndex &index)
{
}
3、原理

        信号发射: 当用户在视图中双击某个项目时,视图会检测到这一事件,并在内部发射doubleClicked(QModelIndex)信号。

        信号连接: 通过connect函数将该信号与特定的槽函数连接起来。这确保了当信号被发射时,相关联的槽函数会被调用。

        槽函数执行: 当信号被发射时,Qt会自动调用与之连接的槽函数。槽函数中,可以访问双击的项目的QModelIndex对象,以便进一步处理该事件。

  QModelIndex对象: 这是一个用于访问数据模型中项目的通用索引类。通过QModelIndex,可以获取到被双击的项目的行号、列号等信息,以及项目的数据。

        具体代码实现过程如下,代码详细介绍已经添加注释:

// 这里是mainwindow.h文件#ifndef MAINWINDOW_H
#define MAINWINDOW_H
/*#include "Mp_Pred.h"*/
#include"ui_mainwindow.h"
#include <QMainWindow>
#include <QLabel>namespace Ui {class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();private slots :void double_selected_action(const QModelIndex &index);  //实现函数声明}// 这里是mainwindow.cpp文件#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "qdebug.h"
#include <qstring.h>
#include "cglobal.h"
#include <QDebug>
#include <QMessageBox>
#include <iostream>
#include <QFile>
#include <QFileDialog>
#include <memory>
#include <string>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);// 这里通过信号与槽函数实现双击QTableWidget中的某一行,其中的数据可以在对应的LineEdit中显示connect(ui->cgl_tblWidget, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(double_selected_action(QModelIndex)));	}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::double_selected_action(const QModelIndex &index)
{// 这里的AENTID是每组数据中对应的第一个数据,通过下面的方法,将其取出,然后放在控件中,需要使用时,进行修改成自己的即可QString AENTID = ui->cgl_tblWidget->model()->index(index.row(), 0).data().toString();//使用一个字符串接收ui->AENTID_QLE->setText(AENTID);//把这个字符串显示在相应的lineEdit控件上QString ATIME = ui->cgl_tblWidget->model()->index(index.row(), 1).data().toString();ui->ATIME_QLE->setText(ATIME);QString ST_code = ui->cgl_tblWidget->model()->index(index.row(), 2).data().toString();ui->ST_code_QLE->setText(ST_code);QString ST_grade = ui->cgl_tblWidget->model()->index(index.row(), 3).data().toString();ui->ST_grade_QLE->setText(ST_grade);}
03-表格更新事件实现

        这里的函数实现和上面函数存在关联,不能脱离,具体解释如下:

        函数double_selected_action()也是上面的函数,这个函数保证执行双击事件之后,全局变量flag_system_updata等于1,也就是不再选中,

        函数on_Update_Table_Box_stateChanged()保证选中QCheckBox之后,全局变量flag_system_updata等于0,表格继续更新。

        函数data_input_result_view_update()用于读取数据库,保证不再选中QCheckBox之后,系统下方界面中的控件不再按照上方表格更新,数据便于观察。

// 这里是mainwindow.h文件#ifndef MAINWINDOW_H
#define MAINWINDOW_H
/*#include "Mp_Pred.h"*/
#include"ui_mainwindow.h"
#include <QMainWindow>
#include <QLabel>namespace Ui {class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();private slots :void on_Update_Table_Box_stateChanged(int arg1); // 是否选中QCheckBox槽函数声明void MainWindow::data_input_result_view_update();}// 这里是mainwindow.cpp文件#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "qdebug.h"
#include <qstring.h>
#include "cglobal.h"
#include <QDebug>
#include <QMessageBox>
#include <iostream>
#include <QFile>
#include <QFileDialog>
#include <memory>
#include <string>// 这里是定义了一个变量用于处理,工作模式 0:数据定时更新 1:选中卷信息 
// 当然放在这里属于全局变量,但是将会占用大量空间,最好单独建立一个文件,用于放置这些全局变量,便于使用,
int flag_system_updata = 0; MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);// 选中函数
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::double_selected_action(const QModelIndex &index)
{// 当双击QTableWidget行时,则发送数据表更新的信号1,此时数据表不再更新,// 在上述data_input_result_view_update函数中完成界面下方数据不在更新,便于观察flag_system_updata = 1;  // 双击选中某条样本之后,QCheckBox为未选中状态,Update_Table_Box为QCheckBox的名字ui->Update_Table_Box->setChecked(false);
}// 产生是否选中QCheckBox事件,若选中则发送数据更新的信号为0,继续更新,该槽函数本身自动产生事件,不需要进行槽函数调用
void MainWindow::on_Update_Table_Box_stateChanged(int arg1)
{bool status_check = ui->Update_Table_Box->isChecked();if (status_check == true){flag_system_updata = 0;}
}// 为了防止表格更新,还需要在读取数据库函数那里进行判断,这样才能保证双击之后不再更新,下方控件仅显示需要观察的数据
void MainWindow::data_input_result_view_update()
{QSqlQuery query_prediction(db_MUI);QDateTime finish_Qdatetime_new, finish_Qdatetime_old, current_time;bool ok;// 双击某条样本之后,数据表更新信号为1,此时给出条件语句,直接返回,不再读取数据表更新数据if (flag_system_updata == 1){return;}
}

总结

        首先本篇进行了系统实现双击表格某一行,表格数据不再更新,可以查看该行所有信息,选中表更新之后,数据可以继续更新的功能演示和具体代码编写,并对代码进行了详细解释。如果有问题,欢迎评论区讨论。

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

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

相关文章

车道分割YOLOV8-SEG

车道分割YOLOV8-SEG&#xff0c;训练得到PT模型&#xff0c;然后转换成ONNX&#xff0c;OPENCV的DNN调用&#xff0c;支持C,PYTHON,ANDROID开发 车道分割YOLOV8-SEG

数据污染对大型语言模型的潜在影响

大型语言模型&#xff08;LLMs&#xff09;中存在的数据污染是一个重要问题&#xff0c;可能会影响它们在各种任务中的表现。这指的是LLMs的训练数据中包含了来自下游任务的测试数据。解决数据污染问题至关重要&#xff0c;因为它可能导致结果偏倚&#xff0c;并影响LLMs在其他…

python三维交互可视化工具plotly使用

三维数据可视化工具使用 import plotly.graph_objects as go import numpy as np# 生成随机点 data np.random.uniform(-3,3,(100000, 2)) Z np.exp(-((data[:, 0] - 0)**2 / (2*1**2) (data[:, 1] - 0)**2 / (2*1**2)))scatter1 go.Scatter3d(xdata[:, 0], ydata[:, 1], …

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器(Http板块)

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器&#xff08;Http板块&#xff09; 一、思路图二、Util板块1、Splite板块&#xff08;分词&#xff09;&#xff08;1&#xff09;代码&#xff08;2&#xff09;测试及测试结果i、第一种测试ii、第二种…

关于discuz论坛网址优化的一些记录(伪静态)

最近网站刚上线&#xff0c;针对SEO做了些操作&#xff0c;为了方便网站网页被收录&#xff0c;特此记录下 1.开启伪静态 按照操作勾选所有项&#xff0c;然后点击查看伪静态规则 2.打开宝塔&#xff0c;找到左侧列表的网站&#xff0c;然后找到相应站点的设置。把discuz自动…

STM32的端口引脚的复用功能及重映射功能解析

目录 STM32的端口引脚的复用功能及重映射功能解析 复用功能 复用功能的初始化 重映射功能 重映射功能的初始化 复用功能和重映射的区别 部分重映射与完全重映射 补充 STM32的端口引脚的复用功能及重映射功能解析 复用功能 首先、我们可以这样去理解stm32引脚的复用功能…

SD-WAN怎样助力企业网络升级

随着企业规模的持续扩张&#xff0c;其网络建设的重要性日益凸显&#xff0c;成为业务成功的基石。尤其对于中小企业而言&#xff0c;信息化和电脑化已成为推动生产力和竞争力提升的关键所在。办公室自动化、数据库、ERP、CRM、物流供应链等关键业务应用的不断增加&#xff0c;…

css 文字左右抖动效果

<template><div class"box"><div class"shake shape">抖动特效交字11</div></div> </template><script setup></script><style scope> .shape {margin: 50px;width: 200px;height: 50px;line-heigh…

计算机存储原理.2

1.主存储器与CPU之间的连接 2.存储器芯片的输入输出信号 3.增加主存的存储字长 3.1位扩展 数据总线的利用成分是不充分的(单块只能读写一位)&#xff0c;为了解决这个问题所以引出了位扩展。 使用多块存储芯片解决这个问题。 3.2字扩展 因为存储器买的是8k*8位的&am…

Linear Secret-Sharing Scheme(LSSS) Monotone Span Program(MSP)

参考文献&#xff1a; [KW93] Karchmer M, Wigderson A. On span programs[C]//[1993] Proceedings of the Eigth Annual Structure in Complexity Theory Conference. IEEE, 1993: 102-111.[CDM00] Cramer R, Damgrd I, Maurer U. General secure multi-party computation fr…

【探索Java编程:从入门到入狱】Day2

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

js[黑马笔记]

js基础 基础语法 输入输出 变量 数组 常量 数据类型 类型转换 运算符 语句 数组 函数 调用方式 函数名() 匿名函数 使用: 1.函数表达式 2.立即执行函数 对象 内置对象 web API DOM document object Model元素操作 获取元素 设置元素 定时器 DOM事件基础 事件监听 事件类…

流量网关与服务网关的区别:(面试题,掌握)

流量网关&#xff1a;&#xff08;如Nignx&#xff0c;OpenResty&#xff0c;Kong&#xff09;是指提供全局性的、与后端业务应用无关的策略&#xff0c;例如 HTTPS证书认证、Web防火墙、全局流量监控&#xff0c;黑白名单等。 服务网关&#xff1a;&#xff08;如Spring Clou…

含匹配扰动的多智能体领航跟随一致性Matlab仿真

文章目录 [TOC](文章目录) 前言一、问题描述二、基于LQR的观测器和控制器设计1.观测器设计2.控制器设计 三、数值仿真四、参考文献总结 前言 ​本文探讨了带有匹配扰动的多智能体领航跟随一致性控制方法&#xff0c;并提供了相应的Matlab仿真代码。 具体的设计步骤如下&#…

大数据—数据采集DataX

一、DataX介绍 官网&#xff1a; DataX/introduction.md at master alibaba/DataX GitHub DataX 是阿里云 DataWorks数据集成 的开源版本&#xff0c;在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。 DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、…

【算法刷题 | 贪心算法02】4.24(摆动序列)

文章目录 3.摆动序列3.1题目3.2解法&#xff1a;贪心3.2.1贪心思路3.2.2代码实现 3.摆动序列 3.1题目 如果连续数字之间的差严格地在正数和负数之间交替&#xff0c;则数字序列称为 摆动序列 。 第一个差&#xff08;如果存在的话&#xff09;可能是正数或负数。仅有一个元素…

WPF 资源基础

动态资源/静态资源 UI代码 <Window x:Class"WpfApp1.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/ex…

太速科技-基于6 U VPX M.2 高带宽加固存储板

基于6 U VPX M.2 高带宽加固存储板 一、板卡概述 基于6 U VPX M.2 高带宽加固存储板&#xff0c;可以实现VPX接口的数据读写到PCI-E总线的NVME存储媒介上。采用PLX8732&#xff0c;上行链路提供带宽x16的PCI-E数据到VPX接口上&#xff1b;下行链路提供3路带宽x4的PCI-E接口…

Unity打包PC端exe,压缩打包为一个exe文件

目录 一.打包成功 1.打包输出文件 二.压缩输出目录为exe单个文件 1.添加到压缩文件 2.其他设置 1.点击“高级→自压缩选项” 2.修改解压后运行程序 3.设置模式 4.更新 三、生成.exe 一.打包成功 1.打包输出文件 1、一个后缀为 BurstDebugInformation_DoNotShip的文…

Android 12 Starting window的添加与移除

添加&#xff1a; 04-13 16:29:55.931 2944 7259 D jinyanmeistart: at com.android.server.wm.StartingSurfaceController.createSplashScreenStartingSurface(StartingSurfaceController.java:87) 04-13 16:29:55.931 2944 7259 D jinyanmeistart: at com.android.server.wm.…