- 1、本文档共35页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
Qt开发入门教程09-Qt事 件
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 ()函数
如果安装多个事件处理器,则会按照后安装先处理的顺序激活
文档评论(0)