概述
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:事件
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事件处理流程的全部内容,希望文章能够帮你解决Qt事件处理流程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复