Qt之事件机制

本文详细介绍了Qt的事件机制,包括事件的来源、事件循环、事件过滤器和事件处理过程。事件可以从系统或Qt自身产生,通过QEventLoop进行管理。事件过滤器允许对象监听和拦截其他对象的事件。事件处理从QApplication::notify()开始,经过事件过滤器和对象的event()函数。同时,文章列举了事件循环在处理复杂计算和防止界面假死等场景中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

事件机制

1、事件的来源
  • 系统产生
    比如用户按下键盘或鼠标,就会产生一个键盘事件或鼠标事件,这是由程序外部产生的事件。操作系统会将这些事件放到系统消息队列中去,进行下一个事件循环时,对该消息进行处理。
  • Qt应用程序自身产生
    程序产生事件的方式有两种。一种是调用QApplication::postEvent(),例如QWidget::update()函数,当重新绘制屏幕时,程序调用update函数,new出来一个paintEvent,调用QApplication::postEvent(),将其放入Qt的消息队列中,等待下一次事件循环再对其依次处理。另一种是调用QApplication::sendEvent函数,该方法不需要将事件放入事件队列中,而是直接被处理,QWidget::repaint函数就是这种方式。简单理解,前者是异步方式,后者是同步方式。
2、事件与事件循环

事件是由操作系统或程序框架在不同的时刻发生的。通俗来说,事件可以简单理解为信号,例如,用户按下鼠标、敲下键盘或者窗口进行重绘时所发出的信号,都可以理解为一个个事件。

所谓的事件循环,也可以称为消息循环。Qt作为一个跨平台的UI框架,其事件循环是对不同的平台的事件做了封装,对外提供统一的接口。

QEventLoop类是Qt中事件循环主要类,该类对外提供了几个接口:

// 启动并阻塞事件
int exec(QEventLoop::ProcessEventsFlags flags=AllEvents);
// 事件退出
void exit
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kevin_org

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值