Qt事件处理流程

Qt的事件处理大概大概可以分为四个步骤:

事件派发 ->事件过滤 ->事件分发 ->事件处理

  • 事件派发:事件派发 是由Qt框架(QApplication 对象)来完成的,它将当前应用程序产生的事件派发给对应的窗口

  • 事件过滤:事件在到达对应的窗口之前,可以被其他对象过滤、拦截、处理

  • 事件分发:每个窗口都会有一个事件分发器,事件分发器会对事件进行分类,再将分好类的事件分发给对应的事件处理函数进行处理,每个事件处理函数的功能其实是非常单一的,只处理当前这一类事件

  • 事件处理:窗口的事件处理函数,对当前事件进行处理

Qt中产生事件之后,整个的处理流程是这样:

1.当事件产生之后,Qt使用当前应用程序(QApplication)对象的notify函数将事件派发给对应的窗口

[override virtual] bool QApplication::notify(QObject* receiver,  QEvent* e); 
// receiver:接收事件的(窗口)对象
// e:事件

2.在事件到达对应的窗口之前,可以被其他的QObject对象截获和处理

[override virtual] bool QObject::eventFilter(QObject* target,  QEvent* e);
// target: 事件原本的接收(窗口)对象
// e:事件

Qt事件处理流程_第1张图片
3.当事件到达指定的窗口后, 窗口的事件分发器会对事件进行分类

[override virtual] bool QWidget::event(QEvent* event);

4:事件分配器对事件进行分类后,按事件的类型(鼠标事件, 键盘事件, resize事件 等等…),将事件分发给对应的事件处理函数去处理,每个事件处理函数已经有默认实现, 我们也可以在子类中重写这些事件处理函数,列举几个事件处理函数:

[virtual] void paintEvent(QPaintEvent *event);
[virtual] void mousePressEvent(QMouseEvent* event);
[virtual] void enterEvent(QEvent *event);
[virtual] void leaveEvent(QEvent *event);

你可能感兴趣的:(qt,开发语言)