首页 > 技术文章 > [Qt] 事件机制(一)

cxc1357 2019-12-05 21:57 原文

  • 事件主要分为两种:
    • 在与用户交互时发生。比如按下鼠标(mousePressEvent),敲击键盘(keyPressEvent)等
    • 系统自动发生,比如计时器事件(timerEvent)等
  • 每种事件对应一个事件处理器,如鼠标移动对应mouseMoveEvent()
  • 在发生事件时(比如说上面说的按下鼠标),就会产生一个QEvent对象,这个QEvent对象会传给当前组件的event函数
  • Qt程序的main函数中需要创建一个QApplication对象,然后调用exec函数。这将令程序进入一个死循环,并不断监听应用程序的事件,发生事件时就生成一个QEvent对象。这称为事件循环
  • Qt系统在处理事件时,有一种机制叫事件传播机制。也就是说,在子组件(比如说一个QButton)中发生的事件,调用了子组件的event函数之后,还会调用父组件(比如说QWidget)的event函数。event函数的返回值就用于控制这样的一个过程
  • 某些应用场景下,需要拦截某个组件发生的事件,让这个事件不再向其他组件进行传播,这时候可以为这个组件或其父组件安装一个事件过滤器evenFilter
  • 事件过滤器可以认为是一张网,这张网可以由你选择安装什么地方(按钮,编辑框,标签,窗体。。。随心所欲),当你把这张网放好之后,你的鼠标,键盘等对相应的控件进行操作的时候,都会先经过这张网,所以你就可以在这张网上面进行一些判断,来决定你要做什么

 

 

 

 

参考:

Qt5 事件(event)机制详解

https://www.jianshu.com/p/48f007c2de09

Qt学习之路26--事件处理、事件重写、关闭文本编辑器操作

https://blog.csdn.net/tqs_1220/article/details/82534486

Qt学习之路27--事件传递过程和事件过滤器

https://blog.csdn.net/tqs_1220/article/details/82563070

QT学习记录3(事件过滤器)

https://blog.csdn.net/zh15237774494/article/details/84330224

Qt事件与常用事件处理、过滤

https://www.cnblogs.com/Dana-gx/p/10475127.html

推荐阅读