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有关的解释

相关推荐
小短腿的代码世界5 小时前
Qt日志系统深度解析:从qDebug到企业级日志框架
开发语言·qt
Morwit9 小时前
QML组件之间的通信方案(暴露子组件)
c++·qt·职场和发展
金色熊族14 小时前
解析QTransform的用法
qt
追烽少年x16 小时前
Qt多线程编程:QThread与QtConcurrent的对比与应用
qt
小短腿的代码世界1 天前
Qt实时盈亏计算深度解析:从持仓数据到动态盈亏展示
开发语言·qt
Python私教1 天前
GenericAgent PySide6 桌面应用深度解析:悬浮按钮 + 聊天面板的原生 Qt 方案
开发语言·数据库·qt
用户805533698031 天前
现代Qt开发教程(新手篇)1.11——定时器
c++·qt
小短腿的代码世界1 天前
Qt券商接口封装深度解析:统一API设计与多源适配
开发语言·qt·单元测试
T0uken1 天前
基于 vcpkg 与 LLVM-MinGW 的 Qt6 静态链接开发方案
c++·windows·qt
Ulyanov1 天前
《现代 Python 桌面应用架构实战:PySide6 + QML 从入门到工程化》 开发环境搭建与工具链极简主义 —— 拒绝臃肿,构建工业级基座
开发语言·python·qt·ui·架构·系统仿真