当前位置: 首页 > news >正文

QT5|C++|通过信号槽机制实现进度条更新

背景:最近在写一个删除90天数据显示进度的功能,实现思路是:通过信号槽捕获当前进度值实现。

 备注:点击start按钮,开始更新进度条,直到100(每隔1s进行更新)

举个栗子:

1、mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QThread>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);connect(ui->pushButton,&QPushButton::clicked,this,&MainWindow::close);connect(ui->pushButton1,&QPushButton::clicked,this,&MainWindow::on_startProcess);void (MyThread::*rmsgSignal)(int) = &MyThread::msgSignal;connect(&thread,rmsgSignal,this,&MainWindow::on_setProcess);ui->progressBar->setRange(0,100);}MainWindow::~MainWindow()
{delete ui;
}//开启线程
void MainWindow::on_startProcess(){thread.start();}//设置进度条参数
void MainWindow::on_setProcess(int v){ui->progressBar->setValue(v);
}

2、mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <mythread.h>#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();MyThread thread;void on_startProcess();void on_setProcess(int v);private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

3、mythread.cpp

#include "mythread.h"MyThread::MyThread()
{}//重写run方法
void MyThread::run(){for(int i = 1;i<=100;i++){QThread::msleep(1000);emit msgSignal(i);}
}

4、MyThread.h

#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QThread>class MyThread: public QThread{Q_OBJECT
public:MyThread();void run() override;signals:void msgSignal(int a);
};#endif // MYTHREAD_H

5、main.cpp

#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

6、mainwindow.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>MainWindow</class><widget class="QMainWindow" name="MainWindow"><property name="geometry"><rect><x>0</x><y>0</y><width>800</width><height>600</height></rect></property><property name="windowTitle"><string>MainWindow</string></property><widget class="QWidget" name="centralwidget"><widget class="QWidget" name="verticalLayoutWidget"><property name="geometry"><rect><x>320</x><y>140</y><width>160</width><height>80</height></rect></property><layout class="QVBoxLayout" name="verticalLayout"><item><widget class="QPushButton" name="pushButton"><property name="text"><string>close</string></property></widget></item><item><widget class="QPushButton" name="pushButton1"><property name="text"><string>start</string></property></widget></item><item><widget class="QProgressBar" name="progressBar"><property name="value"><number>0</number></property><property name="format"><string>%v%</string></property></widget></item></layout></widget></widget><widget class="QMenuBar" name="menubar"><property name="geometry"><rect><x>0</x><y>0</y><width>800</width><height>23</height></rect></property></widget><widget class="QStatusBar" name="statusbar"/></widget><resources/><connections/>
</ui>

7、结果
注:视频为测试结果,仅录制部分作为参考

ProgressBar

http://www.lryc.cn/news/170959.html

相关文章:

  • 什么是智能推荐?智能推荐的原理是什么?
  • Windows下的Elasticsearch-head安装
  • 两台服务器间进行文件传输
  • 研究生选控制嵌入式还是机器视觉好?
  • SecureCRT SSH与FTP连接中文乱码
  • OSI七层网络参考模型与数据流通过程
  • 数字孪生行业相关政策梳理--工业领域相关政策(可下载)
  • 【工具】咸鱼之王辅助小助手来了!
  • 黑马JVM总结(十)
  • JPEG、GIF动图可以转换成SVG、Eps格式的矢量图吗?
  • 数据结构与算法的力量:编写更高效的代码
  • Python批量统计pdf中“中文”字符的个数
  • LeetCode的第 363 场周赛——记录+补题
  • 【网络协议】Http-上
  • Langchain-chatchat本地部署
  • SQL故障和排查解决浅析
  • 基础算法--双指针算法
  • 企业工程项目管理系统源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)
  • 生物的神经系统与机器的人工神经网络
  • JNI 基础
  • 用户参数(zabbix-agent)
  • 期权策略篇: 实现买方狂欢,让卖方稳赚不赔的策略
  • 关于包,类名,方法名的命名规范
  • 1.1 安装配置CentOS
  • go初识iris框架(七) - 实战资源导入和项目框架搭建
  • 甲胎蛋白AFP抗体——博迈伦
  • junit.Test误踩坑,识别不到@Test注解,无法运行测试方法
  • 一加Ace2V/Ace竞速版刷入氧OS13系统-谷歌服务套件-全球语言-国际版体验
  • Java 华为真题-猴子爬山
  • Axios笔记