Qt的QThread多线程使用
QThread简介
最近开发某C++的AI项目,需要用到界面,为了计算过程不阻塞界面,需要使用多线程,在这里学习下Qt自带的多线程操作。
QThread是一个与平台无关的线程类,用于多线程的编程。具体可以在文档中中索引QThread关键字。实际开发中,一般继承这个类,然后运行类的run
函数,这也是一个槽,注意接受一个整型数据。耗时的操作放在run
函数中运行。
实际应用
下面给出一个多线程的模拟文件传输的例子。定义一个MyThread类,继承自QThread,在run函数中模拟一次传输。主界面显示进度。
运行效果:
初始化:
传输过程:
传输完毕:
该代码没有给出界面设计的,只要自己从中拖拽进去一个QPushButton、QProgressBar和QLabel即可,都是使用的默认名称。
自定义的类头文件
/*
* mythread.h
*/
#ifndef MYTHERAD_H
#define MYTHERAD_H#include <QThread>
#include <QString>class MyTherad : public QThread
{Q_OBJECT
public:MyTherad();void run() override;void startThread();unsigned long t; // 间断时间
signals:void resultReady(const QString &s);void sendValue(int v); // 发送数据用的
};#endif // MYTHERAD_H
实现文件
/*
* mythread.cpp
*/
#include "mytherad.h"MyTherad::MyTherad()
{t=100; // 默认睡眠1000毫秒
}void MyTherad::run(){QString result=tr("数据传输完毕!");for(int i=0;i<=100;++i){msleep(t);sendValue(i); // 向外界发送数据}emit resultReady(result);
}void MyTherad::startThread(){run();
}
Widget窗口的头文件
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QPushButton>
#include <QProgressBar>
#include <QLabel>
#include "mytherad.h"namespace Ui {class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = nullptr);~Widget();public slots:void setText();private:Ui::Widget *ui;MyTherad myThread;
};#endif // WIDGET_H
Widget窗口的实现文件
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);// 重新显示文字,注意槽的连接顺序QObject::connect(ui->pushButton,&QPushButton::clicked,this,&Widget::setText);// 启动线程QObject::connect(ui->pushButton,&QPushButton::clicked,&myThread,&MyTherad::startThread);// 显示数据QObject::connect(&myThread,&MyTherad::sendValue,ui->progressBar,&QProgressBar::setValue);// 追加数据内容QObject::connect(&myThread,&MyTherad::resultReady,ui->label,&QLabel::setText);
}Widget::~Widget()
{delete ui;
}void Widget::setText(){ui->label->setText("等待数据传输........");
}
Qt的QThread多线程使用相关推荐
- Python Qt GUI设计:QTimer计时器类、QThread多线程类和事件处理类(基础篇—8)
目录 1.QTimer计时器类 2.QThread多线程类 3.事件处理类 一般情况下,应用程序都是单线程运行的,但是对于GUI程序来说,单线程有时候满足不了需求.例如,如果需要执行一个特别耗时的操作 ...
- Qt下实现多线程串口通信
Qt下实现多线程串口通信 Qt下无论是RS232.RS422.RS485的串口通信都可以使用统一的编码实现.本文把每路串口的通信各放在一个线程中,使用movetoThread的方式实现. 用Seria ...
- Qt中采用多线程实现Socket编程
Qt中采用多线程实现Socket编程 Socket通常也称作"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 本文介绍的是Qt中采用多线程 ...
- QThread多线程编程分析
QThread多线程编程分析 传统图形界面应用程序都只有一个线程执行,并且一次执行一个操作.如果用户调用一个比较耗时的操作,就会冻结界面响应.一个解决方法是按照事件处理的思路:调用 Void QApp ...
- Qt中使用多线程并返回结果到主线程的例子
Qt中使用多线程是通过connect关联信号和槽来实现子线程与主线程之间的数据传递与页面数据展示的,详细请看下面实例: 下面三行代码是实现主线程与子线程通信的信号连接. //子线程运行了RUN()中的 ...
- QT 中的多线程之 moveToThread
文章目录 1. 概述 2. 方法描述 3. 代码: 4. 运行结果 5. 注意事项 6. 结语 1. 概述 在 Qt 中,多线程也被广泛用于实现后台任务.异步操作.多任务处理等功能.通过使用多线程,可 ...
- FFmpeg开发(八)——Qt视频播放器之多线程的使用(参考了暴风影音、迅雷影音)
FFmpeg开发(八)--Qt视频播放器之多线程的使用(参考了暴风影音.迅雷影音) 上篇文章介绍了: FFmpeg开发(七)--Qt视频播放器之播放列表类(参考了暴风影音.迅雷影音) 本播放器系列相关 ...
- 在QT中采用多线程下载文件
在QT中采用多线程下载文件 这里的线程是指下载的通道(和操作系统中的线程不一样),一个线程就是一个文件的下载通道,多线程也就是同时开起好几个下载通道.当服务器提供下载服务 时,使用下载者是共享带宽的, ...
- Qt中使用多线程的一些心得(一)——继承QThread的多线程使用方法
一 前言 二Qt多线程方法一 继承QThread 2.1使用多线程的原因分析 2.2 写一个继承于QThread的线程 三 总结 一 前言 本篇文章部分内容参考了该博文:传送门. Qt中有两种 ...
最新文章
- c++批量重命名_文件批量重命名?这个方法百试百灵
- 每天学习一点,坚持学习!!
- 该按钮可以重启计算机,电脑里面总是自动重启的问题,应该怎么做?
- 如果 “ 2X ”的补码是“ 90H ”,那么 X 的真值是( )。
- 你当真了解count(*)count(id)count(1)吗?
- Ubuntu系统的安装与使用:[3]搜狗输入法安装
- java .item,javabb-javaitem-cloud
- struts 2 时间控件
- python模块讲解_python中常用模块详解一
- java bufferedinputstream关闭_Java BufferedInputStream close()用法及代码示例
- 每日三道前端面试题--vue 第四弹
- 第六次团队作业+登录界面
- 漫谈 Clustering (5): Hierarchical Clustering
- 算法资料:算法导论_原书第3版(中文)(PDF带书签)
- Gl计算机语言,计算机编程和编程语言 - osc_bkg5rgl1的个人空间 - OSCHINA - 中文开源技术交流社区...
- 【※taskmgr.exe进程知识详解※电脑知识】
- ArrayList源码分析与手写
- python输出复数去掉括号_从字符串中删除常用词(及其复数形式)的技术
- 【编译原理】Python实现对一个英文文本的词频统计
- 分布式与云化的主要区别
热门文章
- 人脸识别的Python库
- 【机器学习-西瓜书】四、决策树:信息熵;信息增益;增益率;ID3;C4.5
- (C语言)猴子选大王
- Python——使用“_”下划线作为参数的占位符
- 《Python数据分析》第二版.第三章.[学习笔记][Jupyter notebook]
- 剑指offer——30.包含min函数的栈
- LeetCode 242. 有效的字母异位词 (计数排序思想字符处理)
- CentOS下编译安装Gcc-4.9
- Dao层抽取BaseDao公共方法
- MBProgressHud添加自定义动画