2020-11-20 Qt事件循环

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2020-11-20 Qt事件循环相关的知识,希望对你有一定的参考价值。

参考技术A

Qt事件循环:从队列中不断取出消息、处理消息的过程。

Qt会接管windows的原生窗口消息,翻译成Qt消息,派发给程序下面的各个子对象。

起始于:QCoreApplication::exec()。 如果没有消息循环的话 Qt信号槽无法使用,举个例子

通过QueuedConnection连接的信号,其实是将一个事件压入了消息循环,如果没有QCoreApplication::exec(),那么这个消息循环将永远无法派发到指定的对象.

二:QObject的线程相关性

我们创建了一个QObject的时候,它会与创建自己的线程进行绑定;它参与的消息循环,其实就是它所在线程的消息循环,如果没有消息循环的话 QThread上的QObject甚至无法接受到事件;

另外就是两个不同的线程的QObject如果需要相互通信的话,只能通过QueuedConnection的方式,异步通知对方线程,在下一轮消息循环处理QObject的消息。,QObject应该是它参与哪个消息循环,就由哪个来创建, 因此AutoQueuedConnection 直连 应该是在同一个线程的。不同的线程的话通过事件循环、信号与曹 是优雅的方式。重点: 不同线程的对象是无法直接通信的。需要通过事件。

三:

windows消息循环:

1: 注册窗口类,指定窗口处理函数

2:创建一个窗体  一般来说 创建很多窗口 可以使用同一个窗口处理函数/

然后从消息队列里面取出事件、分发事件、系统将事件分发到不同窗口处理函数。

每一个线程有一份ThreadData,共享同一份事件队列。

四: Qt事件过滤器 :一个QObject对象可以监视发送其他的QObject对象的事件; 你要检测谁,说要去你这边注册一下,这不 有个label来注册了,注册之后我就可以截获你的事件。在我这里面操作啦。 比如点击 画图啥的

以上是关于2020-11-20 Qt事件循环的主要内容,如果未能解决你的问题,请参考以下文章

QT中的线程与事件循环理解

Qt ------ 主事件循环与 QEventLoop

将ZMQ事件循环与QT / Pyforms事件循环相结合

Qt源码阅读 事件循环

Qt 的线程与事件循环

关于Qt的事件循环以及QEventLoop的简单使用(QEventLoop::quit()能够终止事件循环,事件循环是可以嵌套的)