1、首先需要知道QT中事件相关的两个主要的类:QEvent和QApplication:
(1)QEvent是事件对象类,它下面包含了很多的子类,一个子类对象就代表了一个具体的事件。比如用户交互时会产生一个QMouseEvent事件对象,系统自动产生的QTimerEvent定时器事件对象等。
(2)QApplication类。一般的Qt程序,main函数中都有一个QCoreApplication/QGuiApplication/QApplication,并在末尾调用 exec。其里边维护着一个QEventLoop,我们称之为“QT的主事件循环”。
这样当用户单击鼠标时,操作系统会产生一个QMouseEvent事件对象,并加入到了事件队列中。再由QT中的主事件循环进行处理:获取事件、分发事件到相应的接收者。比如我们用鼠标单击一个QLabel文本框,鼠标单击事件最终会被分发到QLabel对象。
2、主事件循环的分发操作(如何分发到对应的接受者):
QCoreApplication中的分发操作主要由sendEvent、postEvent和sendPostedEvents三个函数完成,三个函数实际都调用notify进行事件分发,而notify最终调用notify_helper进行处理;
bool QCoreApplicationPrivate::notify_hel