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的事件循环以及QEventLoop的简单使用(QEventLoop::quit()能够终止事件循环,事件循环是可以嵌套的)