[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_OBJECT

public:
	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_OBJECT

public:
	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.mfbz.cn/a/578667.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

回溯-单词搜索

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格是那些水平相邻或垂直相…

压测--混合场景设置

1、设计测试场景 性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标满足需求定义的检验活动。一般有以下场景&#xff1a; 基准场景&#xff1a;单接口少量并发用户下压测&#xff0c;评估单个功能点性能。负载场景&#xff1a;逐步增…

Python实践应用|NC文件读取

import netCDF4 as nc import numpy as np import matplotlib.pyplot as plt# 打开NC文件 nc_file E:/NC_file/air.sig995.2012.nc # 将your_file.nc替换为你的NC文件路径 nc_data nc.Dataset(nc_file, r)# 查看NC文件中包含的变量 print("Variables in the NC file:&q…

免费简单好用的内网穿透工具(ngrok、natapp),微信回调地址配置

B站视频地址 文章目录 Natapp1、登录注册账号、下载软件2、使用2-1、购买隧道、查看token2-2、端口穿透 Ngrok1、登录注册账号、下载软件2、使用2-1、获取并设置 token2-2、使用 3、隧道 微信回调配置1、注册测试公众号2、回调代码3、回调配置 在一些特殊的场景下&#xff0c;需…

C#基础之结构体

结构体 文章目录 1、概念2、基本语法3、示例4、结构体的使用5、访问修饰符6、结构体的构造函数思考1 描述矩形信息思考2 职业名字释放了技能思考3 小怪兽思考4 多个小怪兽思考5 奥特曼打小怪兽 1、概念 结构体是一种一定义变量类型 它是数据和函数的集合&#xff0c;可以在结…

PCIe总线-MPS MRRS RCB参数介绍(四)

1.概述 PCIe总线的存储器写请求、存储器读完成等TLP中含有数据负载&#xff0c;即Data Payload。Data Payload的长度和MPS&#xff08;Max Payload Size&#xff09;、MRRS&#xff08;Max Read Request Size&#xff09;和RCB&#xff08;Read Completion Boundary&#xff0…

计算机存储原理.2

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

硬件21、接线端子XH2.54、2.54排针排母、2510接插件、PH2.0、町洋接线端子5.08、ISP接口JTAG插座

XH2.54端子的间距为2.54毫米&#xff0c;2.54排针排母的间距也是2.54mm&#xff0c;2510接插件也是2.54、而PH2.0端子的间距为2.0毫米&#xff0c;町洋接线端子插针间的距离是5.08mm&#xff0c;ISP接口JTAG插座针脚的间距一般也是2.54mm XH2.54 针脚间距为2.54mm 插头 接线…

IIS中搭建.Net Core项目,步骤详解

一、准备服务器 1&#xff09;安装IIS 这个比较简单&#xff0c;百度一下就行 2&#xff09;安装 .NET Core 运行时 下载地址&#xff1a;下载 .NET(Linux、macOS 和 Windows) 因为我是本地开发&#xff0c;所以我下载的是SDK 安装成功之后显示如下&#xff1a; 检查是否安装…

判断字符串由几个单词组成(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int world 0;int i 0;char c 0;char string[81] { 0 };int num 0;//提示用户&#xff…

使用Github Action实现Hexo博客自动化部署

本文参考自 Akilar&#xff0c;原文地址&#xff1a;https://akilar.top/posts/f752c86d/ 每次部署Hexo都需要运行指令三件套&#xff0c;随着文章越来越多&#xff0c;编译的时间也随之越来越长&#xff0c;通过Github Action&#xff0c;我们只需要在每次完成博客的编写或修…

OSPF路由计算

1.区域内路由计算 &#xff08;1&#xff09;LSA的基本概念 LS Age&#xff1a;当LSA被始发时&#xff0c;该字段为0&#xff0c;随着LSA在网络中被泛洪&#xff0c;该时间逐渐累加&#xff0c;当到达MaxAge&#xff08;缺省值为3600s&#xff09;时&#xff0c;LSA不再用于路…

传统过程自动化工厂的智能扩展

一 通过NOA概念&#xff0c;公开、安全地迈向未来 随着数字化转型在过程自动化工业中的不断深入&#xff0c;许多公司都面临着同一挑战——如何平衡创新和传统。放眼望去&#xff0c;过程自动化工业和信息技术似乎在以不同的速度发展。虽然过程自动化工厂通过使用传统的自动化…

基于springboot实现企业oa管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现企业oa管理系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了企业OA管理系统的开发全过程。通过分析企业OA管理系统管理的不足&#xff0c;创建了一个计算机管理企业OA管理系统的方案…

C语言数据结构之栈

目录 1.栈的概念及结构2.栈的实现3.栈的代码实现4.相关例题 •͈ᴗ•͈ 个人主页&#xff1a;御翮 •͈ᴗ•͈ 个人专栏&#xff1a;C语言数据结构 •͈ᴗ•͈ 欢迎大家关注和订阅!!! 1.栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插…

AI大模型系列:自然语言处理,从规则到统计的演变

自然语言处理&#xff0c;从规则到统计的演变 自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;是人工智能的一个重要分支&#xff0c;主要研究如何让计算机理解、解释和生成人类语言。从自然语言处理的字面上来看&#xff0c;最重要的是“语言…

Unity | 集成 Protobuf(proto 转 cs 插件及序列化与反序列化)

1. 添加 dll 1. 下载 protobuf 源码 根据需要下载 protobuf 指定版本的源码&#xff0c;这里以 v3.21.12&#xff08;protobuf-csharp-3.21.12.zip&#xff09;为例&#xff1a; 下载地址&#xff1a;「https://github.com/protocolbuffers/protobuf/releases」 2. 下载 Vis…

防火墙技术基础篇:认识安全策略、安全区域、域间转发及报文转发流程

防火墙技术基础篇&#xff1a;认识安全策略、安全区域、域间转发及报文转发流程 一、安全策略匹配机制 简单通俗的讲&#xff0c;防火墙设备最基本的用途就是定义数据如何转发&#xff0c;靠什么定义呢&#xff1f;最基本的就是安全策略&#xff0c;当流量来到防火墙之后首先…

组播技术原理概述

组播与广播和单播的对比 l 组播、广播和单播工作模式的对比 单播&#xff1a;数据报文从一台主机&#xff0c;点对点的发给另外一台主机 广播&#xff1a;数据报文从一台主机&#xff0c;发给广播域内的全部主机 组播&#xff1a;数据报文从一台主机&#xff0c;发给…

JS----前端将列表数据转树型数据

前端将列表数据转树型数据 场景&#xff1a;后端返回列表数据&#xff0c;由前端根据业务需求完成树型数据转换&#xff0c; 常用于侧边导航菜单&#xff0c;下拉树型数据项等 export function listToTree(data: []) {var map: any {},tree: any []data.forEach((item: any…