qt中对任务繁忙时QProgressDialog的使用
来源:互联网 发布:lol引燃伤害数据 编辑:程序博客网 时间:2024/06/06 01:47
在qt中对于后台数据处理比较耗时情况下,如果放在UI主线程中来处理,给人一种卡顿的感觉,可以将耗时的部分放在次线程中来处理,主线程来显示处理进度。
在次线程中处理时,需要将处理进度信息传给UI线程,只需要在次线程中添加信号,主线程中添加对应的槽函数就可以了
处理线程头文件如下:
#ifndef PROCESSTHREAD_H#define PROCESSTHREAD_H#include <QObject>#include <QThread>class processThread : public QThread{ Q_OBJECTpublic: processThread(QObject *parent = 0); ~processThread();protected: void run();signals: void processStart(const QString &); //处理开始的信号 void processEnd(const QString &); //处理结束的信号};#endif // PROCESSTHREAD_H
处理线程源代码:
#include "processthread.h"processThread::processThread(QObject *parent):QThread(parent){}processThread::~processThread(){}void processThread::run(){ emit processStart(QStringLiteral("开始")); QThread::sleep(30); //这里根据需要添加处理过程,暂时模拟休眠30s emit processEnd(QStringLiteral("结束"));}UI主线程中添加处理线程和进度对话框成员变量,头文件代码为:
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include "processthread.h"#include <QProgressDialog>namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{ Q_OBJECTpublic: explicit MainWindow(QWidget *parent = 0); ~MainWindow();private slots: void on_pushButton_clicked(); void processStart(const QString&); void processEnd(const QString&);private: Ui::MainWindow *ui; QProgressDialog progressDialog; processThread thread;};#endif // MAINWINDOW_H
UI主线程中源代码
#include "mainwindow.h"#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); connect(&thread, SIGNAL(processStart(const QString&)), this, SLOT(processStart(const QString&))); connect(&thread, SIGNAL(processEnd(const QString&)), this, SLOT(processEnd(const QString&)));}MainWindow::~MainWindow(){ thread.wait(); delete ui;}void MainWindow::on_pushButton_clicked(){ thread.start();//启动处理线程}void MainWindow::processStart(const QString&){ progressDialog.setRange(0, 0); progressDialog.setWindowTitle(QStringLiteral("处理")); //设置进度对话框标题 progressDialog.setLabelText(QStringLiteral("处理中..."));//设置进度对话框显示文本 progressDialog.exec();}void MainWindow::processEnd(const QString&){ progressDialog.close();//关闭进度对话框}
界面显示为
点击处理,弹出进度对话框
0 0
- qt中对任务繁忙时QProgressDialog的使用
- QProgressDialog使用时不显示的可能问题 #Qt #C++
- QT中进度对话框(QProgressDialog)
- QT中进度对话框(QProgressDialog)
- QProgressDialog(进度条)的使用
- Qt QColorDialog QErrorMessage QFileDialog QFontDialog QProgressDialog 等对话框的使用测试
- 任务繁忙的ACM协会
- QprogressDialog
- QT笔记之进度条QProgressBar和QProgressDialog
- Qt标准对话框之进度对话框(QProgressDialog)
- TCP - WAIT状态及其对繁忙的服务器的影响
- TCP - WAIT状态及其对繁忙的服务器的影响
- linux定时任务crontab的使用,curl命令中url避免使用&,或对&进行转义
- QProgressDialog 快速实现进度的显示界面
- QProgressDialog的使用方法及界面优化
- java系统中使用调度器Quartz实现对正在执行任务的停止
- Qt学习——进度条QProgressBar/QProgressDialog类
- Qt学习——进度条QProgressBar/QProgressDialog类 .
- 蓝桥杯--- 历届试题 带分数(水题)
- 黑马程序员——This、Super关键词的用法
- light oj 1265 - Island of Survival(概率dp)
- OpenCL之图片旋转的实现
- 书写是为了更好的思考——刘未鹏
- qt中对任务繁忙时QProgressDialog的使用
- 从链表删除所有值为val的元素
- Ruby 字元串處理
- poj逗比了...
- 软考复习专题七---软件工程
- cf 301 div2
- sqlyog的安装以及注册码
- 蓝桥杯省赛二等奖
- UVA 10256 The Great Divide