QT多线程的使用(moveToThread方法)
QT有两种实现多线程的方法,一种是“子类化QThread,然后去重写run函数,实现多线程”。一种是“子类化QObject,然后使用moveToThread函数实现多线程”。由于QT官方推荐使用第二种方法,所以我这里主要介绍一下,如何通过子类化QObject去实现多线程。
首先,我们写一个继承QObject的类,并且在第一行写上Q_OBJECT,在定义一个子线程实现功能的函数。thread.h代码如下
#ifndef THREAD_H
#define THREAD_H#include <QObject>class Thread :public QObject
{Q_OBJECT
public:Thread();~thread();void Thread_Fun(void);
};#endif // THREAD_H
第二步,我们在thread.cpp中去完善构造函数与功能函数的代码,代码如下
#include "thread.h"
#include <QDebug>
Thread::Thread()
{qDebug()<<"Thread构造函数ID:"<<QThread::currentThreadId();
}void Thread::Thread_Fun()
{qDebug()<<"子线程功能函数ID:"<<QThread::currentThreadId();
}
第三步,我们在mainwindow.h中添加各种头文件,然后创建一个signals信号,声明一个线程和刚刚创建的thrad类。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QThread>
#include <QObject>
#include <QDebug>
#include "thread.h"namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();signals:void ToThread(); // 信号private:Ui::MainWindow *ui;QThread *Thread_Test;Thread *thread_class;
};#endif // MAINWINDOW_H
最后我们在mainwindow.cpp中,先实例化Thread_Test线程和thread_class类,然后连接这个信号与槽函数。并且把thread_class这个类推向子线程,并且打开子线程。代码如下:
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);Thread_Test = new QThread;thread_class = new Thread;connect(this,&MainWindow::ToThread,thread_class,&Thread::Thread_Fun);thread_class->moveToThread(Thread_Test);Thread_Test->start();emit ToThread();
}MainWindow::~MainWindow()
{delete ui;
}
可以看到最后的输出结果,确实不在同一个线程里面,说明多线程配置是成功的。
我们在.h文件里面创建的signals信号是可以传参数的,这样我们就可以实现子线程与主线程之间参数的互相传递。
QT多线程的使用(moveToThread方法)相关推荐
- Qt多线程编程之moveToThread
moveToThread方法本质上就是将一个对象放在线程上去执行了 QThread官网文档 moveToThread文档 这里把我认为文档中需要注意的内容摘出来 一定要通过槽函数的形式去调用函数, 要 ...
- 使用qt多线程的一个简单方法
有时候在gui编程中需要调用一个非常耗费时间的api类的函数,这个时候不使用多线程的话界面就会卡死.使用多线程有一个非常简单的办法,不需要建立新的QThread派生类. 设需要调用的api定义为 bo ...
- Qt创建多线程的两种方法
来源:https://github.com/czyt1988/czyBlog/tree/master/tech/QtThread 1.摘要 Qt有两种多线程的方法,其中一种是继承QThread的run ...
- Qt多线程之继承QObject(moveToThread方式)
Qt多线程有两两种方式,第一种继承QThread,复写run()函数,但是run()和main()类似,run()函数才是子线程的入口函数,所以在设计到类的操作时,必须把对象或者指针放在run函数里面 ...
- QT 多线程的实现方法以及GUI线程与其他线程间的通信
GUI线程 Qt应用程序exec后就会生成一个线程,这个线程就是主线程,在GUI程序中也称为GUI线程.主线程也是唯一允许创建QApplication或QCoreAppliation对象,比并且可以对 ...
- 【Qt】Qt多线程开发—实现多线程设计的四种方法
Qt-使用Qt实现多线程设计的四种方法 文章目录 Qt-使用Qt实现多线程设计的四种方法 一.写在前面 二.[方法一] QThread:带有可选事件循环的底层API 三.[方法二] QThreadPo ...
- QT 多线程创建方法及应用实例
QT 多线程创建方法及应用实例 方法一: (1)创建一个QT应用 (2)创建线程类,继承QThread simplethreadone.h #ifndef SIMPLETHREADONE_H #def ...
- Qt多线程-QThread
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt多线程-QThread 本文地址:http://techieliang.com/2 ...
- Qt多线程编程(一)入门篇
目录 一.多线程是什么 二.为什么要使用多线程进行开发 1.提高处理效率 2.软件运行更加流畅 3.根据优先级依次处理 三.Qt多线程入门 QThread类,类成员及类成员函数介绍 公有变量 公有函数 ...
- Qt多线程开发(QThread)
关于QT多线程开发介绍 QT下线程的创建方式 Qt中主要有两种创建多线程的方式,一种是直接继承QThread重写run()函数来实现,另外一种是将一个继承于QObject的普通类通过moveToThr ...
最新文章
- 快速获取Android应用包名和Activity名
- 金融行业创新突围,华为如何趟过产业数字化深水区?
- 【Python基础】使用Matplotlib可视化数据的5个强大技巧
- LeetCode 295. 数据流的中位数(大小堆)
- linux在bin下加入ssh,移植 ssh 到开发板
- Spring Cloud微服务之业务物理删除(十)
- jQuery实现的向下推送图文信息滚动效果
- python---之plt.subplot画图详解
- Bootstrap列表组的情景类
- power bi 背景图_Power BI桌面饼图树
- “金三银四”跳槽需谨慎!
- jQuery动态网址标签
- j2ee是什么?(1)
- Linux权限中x是什么意思,linux里的drwxr-xr-x代表的意思
- 锁相环载波同步MATLAB实现,利用锁相环实现载波同步
- veket linux应用软件,veket linux
- 用指定的用户名和密码无法登录到该FTP服务器
- shell脚本获取当前时间和1分钟/1小时前时间
- 微前端——single-spa源码学习
- html滚动字幕图片,网页HTML代码滚动文字制作