Qt开发入门教程09-Qt事 件.pdf
文本预览下载声明
Qt事件处理
TONY 2012 TM 1
事件处理
事件处理流程
信号和事件的区别
事件处理方式
鼠标事件
键盘事件
事件过滤
Tony vopo123@126.com TM 2 2
事件处理介绍
事件是窗口系统或者Qt对不同情况的响应. 绝大多数被产生的事件都是
对户行为的响应,但是也有一些,比如定时器事件,它们是被系统独立
产生。
在Qt中, 事件是一个被发送到事件处理函数的对象
QEvent类是所有事件类的基类。事件类包含事件参数。
基类QEvent, 子类有QMouseEvent, QKeyEvent, QTimerEvent
Qt的主事件循环(QApplication::exec())从事件队列取得本地窗口系统的
事件,并将它们转变成QEvent,然后装转换好的事件发送给QObjects 。
Tony vopo123@126.com TM 3 3
事件处理流程
事件发生后,QApplication::exec()事件循环会接收到事件。
Qt创建一个事件的对象并且把它传给相应的QObject对象
QObject::event( QEvent* e )
如果不处理事件,会重新把事件传给相应的事件处理函数
针对不同的事件有不同的虚拟保护方法实现。
Tony vopo123@126.com TM 4 4
事件发生
exec()循环接收到事件
创建QEvent对象
QObject::event()
QWidget::event()
mousePressEvent() keyPressEvent() paintEvent()
Tony vopo123@126.com TM 5 5
信号和事件的区别
信号
信号不是事件,信号本质上是回调函数,可看作是同步操作。
信号发出者是对象
信号不会循环,接收者会立刻收到
信号返回值无意义
事件
事件一般是通过postEvents()进入到进程主循环的事件队列中,是
异步操作。
事件可以通过sentEvents(),是同步操作。
事件的发出者一般来说是窗口系统,少数来自系统内部。
事件回调时都是从当前窗口开始,一级一级向上派发,直到有一个
窗口返回true ,截断了事件的处理为止
事件会根据返回值判断事件是否被处理
Tony vopo123@126.com TM 6 6
事件处理方式
Qt提供了5个级别的事件处理和过滤方式
1.重新实现特殊的的事件处理器
mousePressEvent(), keyPressEvent(), …
2.重新实现QObject::event()
此方法可以在事件到达特定事件处理器之前处理它们。
3.在QObject中安装事件过滤器
通过对目标对象调用installEventFilter()来注册监视对象。
在监视对象的eventFilter()中处理目标对象的事件。
对象一旦安装过滤器installEventFilter() ,用于目标对象的所有事件都
会先发送给这个监视对象的eventFilter ()函数
如果安装多个事件处理器,则会按照后安装先处理的顺序激活
显示全部