Qt事件处理

Qt有三种事件类型:
自发事件:由窗口系统产生,被放入一个系统队列中,通过事件循环处理,如键盘消息。
投递事件:由Qt应用自身产生,放入Qt的消息队列中,通过事件循环处理,如重绘消息。
发射事件:由Qt应用自身产生,直接发送给目标,不通过事件循环。


Qt的事件循环位于main函数最后的QApplication::exec()中,这是一个死循环不断处理程序接收的事件。对投递事件,可以在一定情况下合并相同的请求。


例子:
绘制事件(paint event):可以由窗口系统产生,也可能由程序自身调用QWidget::update()产生。这个事件通过事件循环,之后去调用QWidget::paintEvent()完成具体重绘工作。而我们不建议直接调用paintEvent()进行重绘,如果需要立刻重绘,可以调用QWidget::repaint()强制进行。


事件的处理可以分为以下5个层次:
1、重载一个制定的事件处理器:如重载QWidget::paintEvent()处理paint event。
2、重载QObject::event()重载一个对象的所有事件处理。
3、在QObject中安装事件过滤器,从而在事件到达该类前进行处理。
4、在qApp上安装事件过滤器,将能监控应用程序受到的所有事件。
5、重载QApplication::notify(),这个函数完成把消息发送给具体对象的工作。


一些事件可以被转发,如果一个事件在派送结束后还没有被处理,这个事件就会抓发给其父Widget,直到最顶层窗口。常见的可转发信号例如:mouse event 和key press event。
如果你在一个事件上调用accept(),表示已经处理改事件,不会再对其进行转发;如果调用ignore(),则会继续转发事件。
一般来说,如果你重载了事件处理器,并进行处理,就会调用accept,对不处理的事件,简单的传递给QWidget的事件处理器,则会在默认事件处理器中调用ignore()。从而导致事件传递给上层函数。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值