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方法)相关推荐

  1. Qt多线程编程之moveToThread

    moveToThread方法本质上就是将一个对象放在线程上去执行了 QThread官网文档 moveToThread文档 这里把我认为文档中需要注意的内容摘出来 一定要通过槽函数的形式去调用函数, 要 ...

  2. 使用qt多线程的一个简单方法

    有时候在gui编程中需要调用一个非常耗费时间的api类的函数,这个时候不使用多线程的话界面就会卡死.使用多线程有一个非常简单的办法,不需要建立新的QThread派生类. 设需要调用的api定义为 bo ...

  3. Qt创建多线程的两种方法

    来源:https://github.com/czyt1988/czyBlog/tree/master/tech/QtThread 1.摘要 Qt有两种多线程的方法,其中一种是继承QThread的run ...

  4. Qt多线程之继承QObject(moveToThread方式)

    Qt多线程有两两种方式,第一种继承QThread,复写run()函数,但是run()和main()类似,run()函数才是子线程的入口函数,所以在设计到类的操作时,必须把对象或者指针放在run函数里面 ...

  5. QT 多线程的实现方法以及GUI线程与其他线程间的通信

    GUI线程 Qt应用程序exec后就会生成一个线程,这个线程就是主线程,在GUI程序中也称为GUI线程.主线程也是唯一允许创建QApplication或QCoreAppliation对象,比并且可以对 ...

  6. 【Qt】Qt多线程开发—实现多线程设计的四种方法

    Qt-使用Qt实现多线程设计的四种方法 文章目录 Qt-使用Qt实现多线程设计的四种方法 一.写在前面 二.[方法一] QThread:带有可选事件循环的底层API 三.[方法二] QThreadPo ...

  7. QT 多线程创建方法及应用实例

    QT 多线程创建方法及应用实例 方法一: (1)创建一个QT应用 (2)创建线程类,继承QThread simplethreadone.h #ifndef SIMPLETHREADONE_H #def ...

  8. Qt多线程-QThread

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt多线程-QThread     本文地址:http://techieliang.com/2 ...

  9. Qt多线程编程(一)入门篇

    目录 一.多线程是什么 二.为什么要使用多线程进行开发 1.提高处理效率 2.软件运行更加流畅 3.根据优先级依次处理 三.Qt多线程入门 QThread类,类成员及类成员函数介绍 公有变量 公有函数 ...

  10. Qt多线程开发(QThread)

    关于QT多线程开发介绍 QT下线程的创建方式 Qt中主要有两种创建多线程的方式,一种是直接继承QThread重写run()函数来实现,另外一种是将一个继承于QObject的普通类通过moveToThr ...

最新文章

  1. 快速获取Android应用包名和Activity名
  2. 金融行业创新突围,华为如何趟过产业数字化深水区?
  3. 【Python基础】使用Matplotlib可视化数据的5个强大技巧
  4. LeetCode 295. 数据流的中位数(大小堆)
  5. linux在bin下加入ssh,移植 ssh 到开发板
  6. Spring Cloud微服务之业务物理删除(十)
  7. jQuery实现的向下推送图文信息滚动效果
  8. python---之plt.subplot画图详解
  9. Bootstrap列表组的情景类
  10. power bi 背景图_Power BI桌面饼图树
  11. “金三银四”跳槽需谨慎!
  12. jQuery动态网址标签
  13. j2ee是什么?(1)
  14. Linux权限中x是什么意思,linux里的drwxr-xr-x代表的意思
  15. 锁相环载波同步MATLAB实现,利用锁相环实现载波同步
  16. veket linux应用软件,veket linux
  17. 用指定的用户名和密码无法登录到该FTP服务器
  18. shell脚本获取当前时间和1分钟/1小时前时间
  19. 微前端——single-spa源码学习
  20. html滚动字幕图片,网页HTML代码滚动文字制作

热门文章

  1. mysql全文索引含义_什么是全文索引,为什么要使用全文索引
  2. 微信、QQ称霸社交,多闪能否上位? 1
  3. 数字字符串转int数组
  4. JavaScript replaceAll() 方法踩坑
  5. 免费的才是最贵的?错!这本书用大数据和机器学习给你量化答案
  6. 基于Python的水母吃鱼游戏的设计与实现
  7. CentOS 7 防火墙开放端口访问
  8. 【mpvue】如何升级mpvue版本
  9. 黑客攻击云盘关闭 魅族用户体验接连被吐槽
  10. python开发之父亲自编写《python编程从入门到实践》中译版图书销量破百万册,完整版PDF开放下载