Event基础
1,Qt中,事件作为一个对象,继承自QEvent类。
常见的事件有:键盘事件QKeyEvent、鼠标事件QMouseEvent、定时器事件QTimerEvent、关闭事件QCloseEvent、输入事件QInputEvent等
2,一个事件由一个特定的QEvent子类来表示,但是有时一个特定QEvent子类来表示,但是有时一个事件又包含多个事件类型,比如鼠标事件又可以分为鼠标按下、单击、双击、移动等操作,这些事件类型都由QEvent类的枚举型QEvent::Type来表示,其中包含了一百多种事件类型,QEvent帮助文档一查便知。
(比如鼠标事件就由一个QMouseEvent对象来表示,但是鼠标触发的事件又有很多种类型,这些类型就由 QMouseEvent 内的多个枚举类型来表示)
3,虽然QEvent的子类可以表示一个事件,但是却不能用来处理事件
处理事件的方式
(QApplication类有 notify 函数)
- 方法一
重新实现部件的paintEvent()、mousePressEvent()等事件处理函数
这种方法是最常用的一种方法,不过他只能用来处理特定部件的特定事件
- 方法二
重新实现notify()函数
这个函数功能强大,提供了完全的控制,可以在事件过滤器得到事件之前就能获得它们
但是,他一次处理一个事件
- 方法三
向QApplication对象上安装事件过滤器
因为一个程序只有一个QApplication对象,所以这样实现的功能与使用notify()函数是相同的。
优点是,可以同时处理多个事件
- 方法四
重新实现event()函数
QObject类的event()函数可以在事件到达默认的事件处理函数之前获得该事件
- 方法五
在对象上安装事件过滤器
使用事件过滤器可以在一个界面类中同时处理不同子部件的不同事件
在实际开发中,常用方法一、方法五。
事件二、三虽然功能强大,却很少用到。因为一个继承自QApplication类,一个要用全局的事件过滤器
参考:
不二如是:https://fishc.com.cn/forum.php?mod=viewthread&tid=77331&ctid=447