Qt:moveToThread

moveToThread

该函数属于QObject,因此任何继承于QObject的对象都可以使用该函数。
使用该函数可以减少主线程界面刷新的压力

官方解释:

1:

更改此对象及其子对象的线程相关性。如果对象有父对象,则无法移动该对象。事件处理将在targetThread中继续。

解释:每一个QObject对象都有事件循环,默认子类事件是可以传递给父类的,界面(或者说是每一个部件)更新,调用的是就重绘事件(paint),正常而言我们只有一个主线程(一个事件循环),也就是main()函数中启动的QApplication::exec()。此时界面上的所有控件的鼠标、键盘相应事件,重绘事件(刷新界面)等都是在主线程中进行。

如果我们创建了一个新的QThread线程,之后将一个没有父对象的QObject调用moveToThread函数移动到这个线程中的话,那个这个QObject的事件循环就会运行在这个子线程中,也就是这个控件的刷新,各种事件响应函数都会在这个子线程中运行,包括这个空间发射的信号也是从子线程中发射的。

2:

要将对象移动到主线程,请使用QApplication::instance()来检索指向当前应用程序的指针,然后使用QAApplication::thread()来获取应用程序所在的线程。例如:myObject->moveToThread(QApplication::instance()->thread());

解释:一种方式,将已经移动到子线程中的QObject对象重新移动回主线程

3:

如果targetThread为nullptr,则此对象及其子对象的所有事件处理都将停止,因为它们不再与任何线程关联。

解释:如果我们在移动QObject对象时,targetThread(nullptr)传入了一个空的对象,则这个QObject将没有线程来负责他的事假循环,将不会有任何响应

4:

请注意,对象的所有活动计时器都将重置。计时器首先在当前线程中停止,然后在targetThread中重新启动(间隔相同)。因此,在线程之间不断移动对象可以无限期地推迟计时器事件。

QEvent::ThreadChange事件在线程相关性更改之前发送到此对象。您可以处理此事件以执行任何特殊过程

解释:QTimer有关的解释

相关推荐
Quz1 小时前
QML PathView:吸附对齐与环形轮播
qt
时间的拾荒人1 小时前
Qt 多线程详解:从 QThread 到实战
开发语言·qt·面试
时间的拾荒人4 小时前
Qt 事件机制全解析:从事件处理到事件过滤器
开发语言·qt·面试
时间的拾荒人7 小时前
Qt 窗口系统详解:从菜单栏到对话框的完整指南
开发语言·qt·面试
qq_401700418 小时前
Qt 炫酷曲线,图表,2D/3D开源库
开发语言·qt
扶尔魔ocy9 小时前
【qt openGL入门笔记】基础光照
qt·opengl
时间的拾荒人10 小时前
Qt 文件操作详解:从基础类到读写实战
开发语言·qt·面试
扶尔魔ocy13 小时前
【qt openGL入门笔记】坐标系统和摄像机
qt·opengl
C++ 老炮儿的技术栈1 天前
main函数之后的调用
c语言·c++·人工智能·qt·mfc·c
沫璃染墨1 天前
《Qt从零入门系列(十二):Qt文件操作详解——从QFile读写到QFileInfo与记事本实战》
开发语言·网络·c++·qt·交互·信号处理·文件