Qt事件分类
基于事件如何被产生与分发,可以把事件分为三类:
1、Spontaneous 事件
由窗口系统产生,它们被放到系统队列中,通过事件循环逐个处理。
本类事件通常是Windows System把从系统得到的消息,比如鼠标按键、键盘按键等, 放入系统的消息队列中。 Qt事件循环的时候读取这些事件,转化为QEvent,再依次逐个处理。
2、Posted 事件
由Qt或应用程序产生,它们被Qt组成队列,再通过事件循环处理。
调用QApplication::postEvent()来产生一个posted类型事件。例如:QWidget::update()函数,当需要重新绘制屏幕时,程序调用update()函数。
其实现的原理是new出一个paintEvent,调用 QApplication::postEvent(),将其放入Qt的消息队列中,等待依次被处理。
3、Send事件
由Qt或应用程序产生,但它们被直接发送到目标对象。
调用QApplication::sendEvent()函数来产生一个send类型事件。
send 类型事件不会放入队列, 而是直接被派发和处理, QWidget::repaint()函数用的就是这种方式。