文档详情

Qt开发入门教程09-Qt事 件.pdf

发布:2018-10-11约1.84万字共35页下载文档
文本预览下载声明
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 ()函数  如果安装多个事件处理器,则会按照后安装先处理的顺序激活
显示全部
相似文档