Qt多线程之-moveToThread(附demo)

写在前面:文章略显啰嗦,本人写作水平有限,因为笔者在刚接触QT的时候,遇到很多奇怪的问题(越是新手越容易遇到奇怪的事情,往往一个clean加rebuilding就能解决的问题却要花费大量时间,哈哈),所以写这篇的时候唯恐漏掉细节,给学习中的读者造成困扰,开头有demo的链接。

在最初学习Qt的多线程时,我们往往接触到的是创建一个继承于 QThread 的类,重写并调用 run() 函数的方式;从Qt 4.4开始,Qt官方推出了新的线程使用方式,并推荐使用该方式,就是我们接下来要讲的 moveToThread

下面对moveToThread进行简单的演示:
1.首先创建一个Qt工程,并添加线程类
右键工程,添加一个继承于 QObject 的类(我这里叫 MyThread),并在主线程的.h中添加新类的头文件;
在这里插入图片描述在这里插入图片描述
2.主线程类中添加成员MyThread* myThread 与 QThread* thread(我这里使用指针);
在这里插入图片描述
3.打开设计师界面,添加两个button,对象名改为 btnStart,btnStop(个人习惯);
在这里插入图片描述
4.在主窗口的构造函数中为myThread、thread成员对象申请空间,并打印线程号;
在这里插入图片描述
注意,此处 thread 指定了父对象,myThread不能指定父对象,否则会导致线程方法仍在主线程。
5.在 MyThread 类中添加isRunning(用作标志位),添加线程槽函数,void threadSlot();(只能通过信号-槽的方式调用线程方法
在这里插入图片描述
初始化isRuinning, 实现方法;(在此间隔 1s 打印线程号)
在这里插入图片描述
6.主窗口注册信号并绑定槽函数
在这里插入图片描述
在这里插入图片描述

输出结果:
在这里插入图片描述
可以看到,不是在同一个线程。

猜你喜欢

转载自blog.csdn.net/qq_45014727/article/details/106273620
今日推荐