Qt 事件系统的解读
文章目录
- Qt 事件系统
- 题记:
- 1、QEvent 类关系图
- 2、Qt中的事件
- 3、 事件的处理
- 4、事件的传递
- 5 、事件过滤器与事件的发送
Qt 事件系统
题记:
突然想感慨几句话:
1、熟悉Qt的框架的确不是一朝一夕的事情。首先要懂得C++的语法规则、其次还需要不断摸索理解Qt的框架。
2、概念性的知识建构是是一个逐级递增的过程,这个过程就像打地基一样不断夯实。可能一本工具书,需要翻阅不仅仅是一遍两遍。看十遍的效果和看一遍的效果是不一样的。看五十遍和看十遍的效果更是不一样。
3、通过一些小小项目实践来体验编程了乐趣。
Qt的事件系统这部分内容稍显的复杂。本篇就来梳理梳理吧
1、QEvent 类关系图
Qt中,事件作为上一个对象,继承QEvent类。常见的有QKeyEvent、鼠标事件QMouseEvent和定时器事件QTimerEvent 等。
2、Qt中的事件
事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。
事件和信号是不同层面的东西,发出者不同,作用也不同。
在Qt中,任何QObject 子类都可以接收和处理事件。
3、 事件的处理
一个事件由一个特定的QEvent子类来表示。
事件可以包含多个事件类型,比如鼠标事件可以分为鼠标按下,双击、和移动等多种操作。
5种处理事件的方法:
方法一:重新实现部件的paintEvent()、mousePressEvent()等事件处理方法。该方法最常用,但只能处理特定部件的特定事件
方法二:重新实现notify() 函数。这个函数功能强大,提供了完全的控制,可以在事件过滤器得到事件之前就捕获它们。但是,它一次只能处理一个事件。
方法三:向QApplication对象上安装事件过滤器。
方法四:重新实现event()函数。该函数可以在事件到达默认的事件处理函数之前获得该事件。
方法五:安装事件过滤器。
4、事件的传递
在每一个程序的main()函数的最后都会调用QApplication类的exec()函数,它会使Qt应用程序进入事件循环。
事件的传递过程:
- 事件先递给指定窗口部件,或者说是先传递给获得焦点的窗口部件。
- 如果该部件忽略掉该事件,该事件就会传递给这个部件的父部件。
注意:在重新实现事件处理函数时,一般要调用父类的相应事件处理函数来实现默认操作。
5 、事件过滤器与事件的发送
Qt 提供了事件过滤器来在一个部件中监控其他多个部件的事件。
事件过滤器与其他部件不同,它不是一个类,二是由两个函数组成的一组操作。
事件过滤器用来完成一个部件对其他部件的事件的监视。
这两个函数分别是installFilter() 和eventFilter()
总结
关于事件内容的概述就这么多,具体的应用还是要结合实例来理解。
Qt 事件系统的解读相关推荐
- Qt 事件处理机制-qt源码解读
在Qt中,事件被封装成一个个对象,所有的事件均继承自抽象类QEvent. 接下来依次谈谈Qt中有谁来产生.分发.接受和处理事件. 本篇来介绍Qt 事件处理机制.深入了解事件处理系统对于每个学习Qt人来 ...
- QT 事件系统之QMouseEvent鼠标事件
概述 在Qt中,鼠标事件被封装成.QMouseEvent对象,QMouseEvent中包含一些参数,用描述鼠标事件. 在QT中,鼠标事件包含:鼠标按键按下,鼠标按键释放,鼠标双击事件,鼠标移动事件. ...
- Qt | 事件系统 QEvent
前言: 在Qt中,事件是被作为一个对象的,继承自QEvent类.事件和信号不是一个概念,比如说单击一下界面上的按钮,这时产生一个鼠标事件(QMouseEvent),这个事件不是按钮产生的,但是因为按钮 ...
- Qt源码解析之事件系统(一)
Qt源码解析之事件系统 一.向事件循环里面添加事件 二.QThread里面的事件循环 一.向事件循环里面添加事件 [static] void QCoreApplication::postEvent(Q ...
- 【转】【QT】 Threads, Events and QObjects
前言: qt wiki 中这篇文章3月份再次更新,文章对 QThread 的用法,使用场景,有很好的论述,可以作为 Qt 多线程编程的使用指南,原文在这里,原作者 peppe 开的讨论贴在这里. 原文 ...
- Qt MetaObject sysmtem 详解之三:QMetaObject接口实现
本篇从Qt MetaObject源代码解读相关接口的实现,这些接口都定义于qmetaobject.cpp中. QMetaObject::className() inline const char *Q ...
- Qt线程、事件与QObject
线程.事件与QObject 敬告:测试版本 原文连接:http://m.blog.csdn.net/blog/shang322/9344475# 本译文接近定稿,但还须一些加工和更好的例子.欢迎任何评 ...
- qt中sendevent_Qt Event Dispatcher学习
距离上次整理Qt事件系统已经过了14个月了.重新理理思绪: Qt中的事件大致可分为3类: Spontaneous events 从系统得到的消息:鼠标按键.键盘按键.定时器事件等.转化为QEvent后 ...
- Qt QTableView焦点事件
开发过程中发现,在QTableView获得焦点时,按键无法响应,经过几番分析查找发现,QTableVew位于子窗口中,而且其本身会接受按键事件.因此在QTableView获得焦点时,按键点击并不会触发 ...
最新文章
- 一周AI看点 | 董明珠投资150亿洛阳造机器人 北京首条无人驾驶地铁线空载试运行
- 微信自定义分享卡片链接的解决方案(可自定义标题 描述 图片)
- ssm项目jsp加载不出来图片_16. SSM 搭建
- linux文本编辑利器-vim
- Python其他数据结构collection模块-namtuple defaultdict deque Queue Counter OrderDict arrary
- 易商云页面认证失败是什么情况_Serverless 云原生框架 Malagu:认证与授权
- 2020八年级计算机会考计划,初二下学期学习计划2020
- leetcode python3 简单题136. Single Number
- Linux 内核源代码的结构
- working-with-php-and-beanstalkd
- linux去掉日志中的skipping,Linux日志文件总管 logrotate
- ubuntu系统无法连接识别到adb设备和fastboot设备解决方法
- 面向对象PHP之Clone对象
- SACC2018:教您如何实现大数据分析与精准推荐
- UCOS操作系统——信号量实验(十)
- UART、RS-232、RS-422、RS-485
- MATLAB绘图中特殊符号的插入方法
- 游戏音效制作初学者的福音—入门级软件介绍
- Vite:Error: Cannot find module ‘worker_threads‘
- 5000字:一文看懂用户运营之增长八卦模型