QT 消息循环(整体)

什么是消息循环

最简单的理解就是系统、程序创建的一个队列,不断的由“各种输入”压到队尾,然后不断的从队首取当前内所有消息,并逐一执行。

消息的类型

系统:鼠标点击移动、键盘点击、输入;

程序:GUI绘制、创建、销毁;

QT的消息循环与系统原生消息的区别(以windows为例)

  1. Qt 接管了操作系统的原生的GUI消息,并转义成Qt的内部消息,分发给当前应用程序的QObject
  2. Qt 支持对消息进行自定义过滤和分发
bool eventFilter(QObject *obj, QEvent *event) override;
  1. Qt还同时支持处理操作系统的原生消息
nativeEvent(const QByteArray &eventType, void *message, long *result)

Qt消息循环的级别

先说个人结论 5个级别,从全局到具体消息如下

  1. QApplication::notify(QObject *receiver, QEvent *e)

Qt的GUi程序都是由QApplication::notify()接管来自全局的SendMessage和PostMessage

  1. bool QApplication eventFilter(QObject *watched, QEvent *event)

我们可以通过给qApp装上事件过滤器,这样可以全局某些事件的分发控制

  1. Qt 对象的bool eventFilter(QObject *watched, QEvent *event)

每个QObject对象的可以通过eventFilter优先处理成对应的逻辑,比如:全局有两个QLabel,我们分别为eventFiler拦截点击事件,使得A点击后响应变蓝,B点击后响应变红

  1. 重载bool event(QEvent *event)

经历了从底向上的派发,如果事件没有被过滤掉或处理,接收者会在bool event(QEvent *event)调用预先定义好的事件处理函数。一般这些事件处理函数处理完毕后会对消息进行标识QEvent::ignore() 或 QEvent::accept()

  1. 常见重载特定事件处理函数,如:mousePressEvent(QMouseEvent *event)、keyPressEvent(QKeyEvent *event),

可以针对不同对象、不同的特定消息进行自定义操作,具体没啥好说的···

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值