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

news2025/1/15 19:52:43

前言

        在需要庞大的数据量的系统中,基于合适的功能对数据进行观察和使用至关重要,本篇在自己项目实战的基础上,基于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.coloradmin.cn/o/1628677.html

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

相关文章

Penpad 再获 Animoca Brands 投资,全新生态历程

Penpad是Scroll生态的LaunchPad & Yield Aggregator平台&#xff0c;该平台近日在融资上取得了系列进展。据悉&#xff0c;Penpad在前不久率先获得了来自于Gate Labs以及Scroll联合创始人Sandy Peng的融资&#xff0c;并且在近日&#xff0c;其又获得了来自于知名加密投资机…

上市公司专利数据、专利申请、专利授权和质量指标计算面板数据(1990-2022年)

01、数据简介 专利作为企业创新能力和核心竞争力的体现&#xff0c;越来越受到上市公司的重视。了解上市公司的专利数据、专利申请、专利授权和质量指标计算&#xff0c;有助于投资者更好地评估公司的创新能力和长期发展潜力。 通过分析上市公司的专利数据、专利申请、专利授…

C语言浮点型数据在内存中的存储及取出等的介绍

文章目录 前言一、浮点型在内存中的存储二、浮点数存储规则三、浮点数在内存中的存储&#xff08;32位&#xff09;float类型四、浮点数在内存中的存储&#xff08;64位&#xff09;double类型五、指数E从内存中取出分成三种情况1. E不全为0或不全为12. E全为03. E全为1 六、有…

Golang基础1-基本类型、if、switch、string

基本类型 bool 整数&#xff1a;byte(相当于uint8), rune(相当于int32), int/uint ,int8/uint8 ,int16/uint16 ,int32/uint32 ,int64/uint64 浮点数: float32 ,float64, complex64 ,complex128 array&#xff08;值类型&#xff09;、slice、map、chan&#xff08;引用类型…

前期Hadoop学习总结

前期Hadoop学习总结 1.Linux&#xff1a;操作系统 ​ 2.虚拟机&#xff1a;主机 3.SecureCRT &#xff08;客户端&#xff09;&#xff1a;连接Linux 方便操作 4.Hadoop&#xff1a;软件 这个软件要装在Linux里面 5.Hadoop是干嘛的&#xff1a; Hadoop是一个开源的分布式计…

【LLMOps】小白详细教程,在Dify中创建并使用自定义工具

文章目录 博客详细讲解视频点击查看高清脑图 1. 搭建天气查询http服务1.1. flask代码1.2. 接口优化方法 2. 生成openapi json schema2.1. 测试接口2.2. 生成openapi schema 3. 在dify中创建自定义工具3.1. 导入schema3.2. 设置工具认证信息3.3. 测试工具 4. 调用工具4.1. Agent…

Apache Seata的可观测实践

title: Seata的可观测实践 keywords: [Seata、分布式事务、数据一致性、微服务、可观测] description: 本文介绍Seata在可观测领域的探索和实践 author: 刘戎-Seata 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 Seata简介 Seata的…

matplotlib 安装失败:Failed building wheel for matplotlib 解决方案

Python | Failed building wheel for matplotlib 朋友遇到 python 安装 matplotlib 时的问题&#xff0c;笔者帮忙远程调试(踩了不少坑)。网上的解决方案有很多无效&#xff0c;以此来记录以下个人解决方案。 在使用指令 pip install matplotlib出现如下报错&#xff1a; “…

机器学习理论基础—集成学习(1)

机器学习理论基础—集成学习 个体与集成 集成学习通过构建并结合多个学习器来完成学习任务&#xff0c;有时也称为多分类系统等。 分类&#xff1a; 根据集成学习中的个体学习器的不同可以分为同质集成&#xff08;集成的学习器相同例如全部是决策树&#xff09;&#xff0c…

目标检测——农作物杂草数据集

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

centos 安装配置文件中心 nacos2.2.3 稳定版

安装mysql 8 参考文章 centos7搭建mysql5.6 && mysql 8.0_centos7 mysql5.6-CSDN博客 安装 jdk 17 官网下载 对应的版本 Java Downloads | Oracle wget https://download.java.net/java/GA/jdk17.0.2/dfd4a8d0985749f896bed50d7138ee7f/8/GPL/openjdk-17.0.2_l…

15(第十四章,大数据和数据科学)

目录 概述 基本概念 数据仓库/传统商务智能与数据科学的比较 数据科学的过程 大数据 大数据来源 数据湖 机器学习 监督学习 无监督学习 强化学习 扩展 1、数据仓库&#xff08;Data Warehouse&#xff09; 2、数据湖(Data Lake) 3、大数据平台1.0 4、数据中台 …

Visual Studio中怎样更改Nuget程序包源

场景 Visual Studio 2019 在使用NuGet添加依赖包时&#xff0c;在预览中搜索不到程序包。 排查下NuGet的程序包源为本地。 将程序包源修改下。 实现 在解决方案上右击选择管理解决方案中的NuGet程序包(在 Visual Studio 中打开“工具”>“选项”>“NuGet 包管理器”…

vim 插件01:插件管理神器pathogen

1、pathogen简介 Vim 插件 pathogen 是一款历史比较悠久的 Vim 插件管理器。Pathogen 的主要功能是提供一种模块化的方式来管理和加载 Vim 插件。说人话&#xff1a;vim是一款管理各类插件的插卡&#xff0c;使用它会让插件的安装和使用非常方便。 以下是 Pathogen 的主要特点…

高级STM32应用开发:使用HAL库和RTOS

引言 STM32系列微控制器以其高性能、丰富的外设支持和低功耗特性&#xff0c;在工业、汽车及消费电子市场中占有显著地位。 下面我们旨在探讨STM32的高级开发技术&#xff0c;包括硬件抽象层&#xff08;HAL&#xff09;库的使用和实时操作系统&#xff08;RTOS&#xff09;的…

python之excel加工处理小案例一则

一、工具用途 工作中&#xff0c;需要对各类excel进行加工处理&#xff0c;当表和字段比较多时&#xff0c;关联条件又有多个&#xff0c;每次通过execl的vlookup之类的关联公式手工可以解决工作需求&#xff0c;但一般耗时较长&#xff0c;且人工统计匹配也存在出错的情况。 …

Kafka学习笔记01【2024最新版】

一、Kafka-课程介绍 官网地址&#xff1a;Apache KafkaApache Kafka: A Distributed Streaming Platform.https://kafka.apache.org/ kafka 3.6.1版本&#xff0c;作为经典分布式订阅、发布的消息传输中间件&#xff0c;kafka在实时数据处理、消息队列、流处理等领域具有广泛…

利用yakit实现csrf (lucy争夺最帅男银的csrf之旅)

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 csrf原理:【web安全】CSRF漏洞攻击与防御-CSDN博客 文章主要内容提炼 本文主要讲利用yakit实现csrf的过程。 用pikachu靶场和内网环境做案例。 如需漏洞原理请点击上面原理的导航。 &#xff08;因为我觉得yak…

RFID技术引领3C手机镜头模组产线智能化转型

RFID技术引领3C手机镜头模组产线智能化转型 应用背景 随着智能手机市场的快速发展与技术创新&#xff0c;手机镜头模组作为影像功能的核心组件&#xff0c;其生产精度、效率及供应链管理的重要性日益凸显。面对复杂多变的市场需求、严格的品质要求以及激烈的市场竞争&#xf…

01.JAVAEE初阶之计算机如何工作

1.一台机器如何组成 冯诺依曼体系 CPU 中央处理器: 进行算术运算和逻辑判断.存储器: 分为外存和内存, 用于存储数据(使用二进制方式存储)输入设备: 用户给计算机发号施令的设备.输出设备: 计算机个用户汇报结果的设备. 针对存储空间 硬盘 > 内存 >> CPU针对数据访问…