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. RPC远程调用通俗理解
  2. form action可以变量么_在 Laravel 中优雅处理 Form 表单
  3. 早上醒来收获一个Surprise,成为CSDN博客专家了
  4. python交换函数_python a,b = b,一个实现?它与C ++交换函数有何不同?
  5. java环境变量修改不了_win10系统安装了jdk,修改环境变量配置不生效的解决方法...
  6. android 5.1 壁纸路径,RTFSC – Android5.1 壁纸设置流程简析 – RustFisher
  7. 开发转测试没人要_新人如何快速的进入融入软件测试行业?
  8. 信息学奥赛一本通 提高篇 第六部分 数学基础 第1章 快速幂
  9. 在reader中勾选pdf复选框_轻松控制PDF文件的打开方式
  10. 移动国家号(MCC)
  11. python 北上资金_如何查看北向资金? 什么是北向资金 在股市里面,南代表的是HK,北代表的是大陆。北向 = 从南向北流动,那么北向资金就很好理解了,就是HK的... - 雪球...
  12. iPhoneSE3变化却提高了价格,安卓手机获得了喘息的空间
  13. 局域网打印机共享怎么设置_XP系统设置局域网共享打印机的操作步骤
  14. 财报季 | 贝壳找房2021年上半年营收449亿元,月活用户达5000万
  15. java动态规划凑硬币问题_动态规划--凑硬币问题
  16. please use torch.load with map_location=torch.device(‘cpu‘) to map your storages to the CPU.
  17. Android使用adb截屏
  18. sever串口wifi拓展板_基于串口调试助手的WIFI模块调试-FPGA简单联网(点灯)...
  19. JavaScript——实现九九乘法表
  20. Navicat 连接阿里云上的数据库

热门文章

  1. 智慧消防物联网系统解决方案 加速推进消防监测智能化发展
  2. RabbitMQ-fanout广播模式
  3. 【html】超链接样式
  4. 中兴智能交通公司总裁谈物联网“狼来了”
  5. python判断输入是否为数字、在输出_判断Python输入是否为数字、字符
  6. hutool中Convert工具类的常用方法
  7. java string 转换 int_java如何把String类型转换为int类型
  8. iOS播放mp3没声音
  9. 下载suds 报错 ModuleNotFoundError: No module named ‘suds‘
  10. ideavim快捷键整理