我是靠谱客的博主 神勇百褶裙,最近开发中收集的这篇文章主要介绍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:事件

在这里插入图片描述
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事件处理流程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部