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

相关推荐
钢铁男儿4 小时前
PyQt5高级界而控件(容器:装载更多的控件QDockWidget)
数据库·python·qt
追烽少年x15 小时前
Qt中的QProcess类
qt
轩情吖16 小时前
Qt的第一个程序(2)
服务器·数据库·qt·qt creator·qlineedit·hello world·编辑框
心愿许得无限大17 小时前
Qt 常用界面组件
开发语言·c++·qt
机器视觉知识推荐、就业指导18 小时前
Qt 与Halcon联合开发八: 结合Qt与Halcon实现海康相机采图显示(附源码)
开发语言·数码相机·qt
charlie11451419119 小时前
如何使用Qt创建一个浮在MainWindow上的滑动小Panel
开发语言·c++·qt·界面设计
cpp_learners1 天前
QML与C++交互之创建自定义对象
c++·qt·qml
算法练习生1 天前
Qt核心类QWidget及其派生类详解
开发语言·c++·qt
程序员爱钓鱼2 天前
【无标题】Go语言中的反射机制 — 元编程技巧与注意事项
开发语言·qt
无畏烧风2 天前
[Qt] visual studio code 安装 Qt插件
qt