当前位置: 首页 > news >正文

QT(事件)

一、事件

前言

事件是QT的三大机制之一,一定程度上信号和槽也属于事件的一种
QT中的事件指哪些:窗口关闭,窗口显示,敲击键盘,点击鼠标左键、鼠标右键、鼠标滚轮,文件拖放等等

1、事件循环

QT中的所有事件,都是放在 "事件循环" 中,被反复执行的

本质上不是一次性的操作,而是这些事件,这些函数,被反复触发,反复执行,那么就会出现在事件循环中,被反复执行。

2、事件的本质

在QT中,所有的事件,本质上都是受保护的虚函数,发生了对应的事件,就会调用对应的受保护的函数。
所有事件函数中,都有一个事件对象,用来维护并记录事件发生的过程中所产生的数据,我们可以通过这个对象,获取事件过程中所产生的数据

void 事件(事件对象 ev){我们可以通过 "事件对象" ev 来获取事件中的数据
}

3、关闭事件和隐藏事件

1)关闭事件

事件函数:virtual void closeEvent(QCloseEvent* ev);
事件对象:QCloseEvent* ev :关闭事件中基本不产生数据,所以没啥用
发生条件:1.点击窗口的关闭键2.手动调用函数close();关闭窗口
关闭事件的特点:1.在关闭事件中,会先关闭窗口,再调用析构函数2.只有将所有的窗口都隐藏或关闭时,并且最后一个事件时关闭事件时,才会调用析构函数,并且是调用所有关闭和隐藏了的窗口的析构函数3.关闭事件是通过隐藏事件实现的

2)隐藏事件

事件函数:virtual void hideEvent(QHideEvent* ev);
事件对象:隐藏事件不产生数据,不需要调用
触发条件:1.点击窗口的隐藏键2.手动调用函数hide();隐藏窗口
隐藏事件的特点:1.隐藏事件不会调用析构函数2.如果操作的最后一个窗口触发的事件,是隐藏事件,则不论前面有没有关闭事件,都不会调用析构函数

3)关闭事件和隐藏事件的区别

无论是关闭事件还是隐藏事件,现象都是将窗口给隐藏
区别在于:
隐藏事件,无论如何都不会调用析构函数
关闭事件,会有条件的调用析构函数

4、键盘事件

1)键盘事件的槽函数

事件函数:virtual void keyPressEvent(QKeyEvent* ev);      //按下事件virtual void keyReleaseEvent(QKeyEvent* ev);    //释放事件
事件对象:获取键盘上按下的按键的值以及功能
触发条件:按下、释放键盘上的按键

2)如何获取键盘按下的按键值

QString QKeyEvent::text() const
功能:以字符串类型,返回键盘敲击的值

3)如何获取键盘按下的所有按键(包括功能按键)

int QKeyEvent::key() const
功能:可以获取键盘上按下的每一个按键,包括功能按键
返回值:是一个枚举,每个枚举值代表按下的不同按键

4)如何获取键盘按下的组合键

Qt::KeyboardModifiers modifiers() const
功能:返回按下的组合键,如果按下的不是组合键,就返回noModifier

5)键盘事件的重复触发机制

键盘的重复触发机制是指,如果按键按住,不抬起释放,就会重复触发键盘的 "按下" - "抬起" 事件,直到按键真正被释放。在键盘事件中有一个函数可以检测按键是否正在被按下,就是isAutoRepeat()

函数原型:bool QKeyEvent::isAutoRepeat() const
功能:检查是否有按键正在被按下,如果有就返回True,如果没有就返回False

5、事件过滤器

QT当中事件的流转过程如下

1. 发生物理事件;
2. 发生事件的窗口捕获该事件;
3. 将该事件交给事件过滤器,经过各种过滤以后;
4. 派发给目标窗口;
当前鼠标焦点在哪个窗口,就会派发事件给哪个窗口
如果所有窗口都不具备焦点,则派发个事件发生的窗口
5. 接收到事件的窗口调用对应的事件函数。

1)label文本框

label对象,不会被事件过滤器派发事件

2)将ui界面中某个窗口的类型,修改成我们自己写的类型

3)手动将事件派发个目标窗口

4)

6、鼠标事件

1)鼠标左键事件

2)鼠标右键事件

(1)向右键菜单栏中添加选项

7、拖放事件

1)拖放事件的触发

2)拖入事件的代码

3)释放事件的触发

4)释放事件的代码

http://www.xdnf.cn/news/1301923.html

相关文章:

  • 【机器学习深度学习】客观评估训练程度
  • AIoT浪潮之巅:AI如何赋能边缘物联网,解锁三大核心潜能
  • Spring中存在两个相同的Bean是否会报错?
  • Java 大视界 -- Java 大数据在智能教育虚拟学习环境构建与学习体验增强中的应用(399)
  • STM32F103C8T6学习——直接存储器访问(DMA)标准库实战3(ADC数据采集+DMA回传)
  • 开始回溯的学习
  • I/O多路复用特性与实现
  • 【学习嵌入式day-25-线程】
  • 扣子(Coze),开源了!Dify 天塌了
  • 无人机智能跟踪模块设计与运行分析
  • Mac Mysql 卸载
  • 【Docker】openEuler 使用docker-compose部署gitlab-ce
  • C++设计模式:类间关系
  • 企业级时序数据库选型指南:从传统架构向智能时序数据管理的转型之路
  • Flinksql bug: Heartbeat of TaskManager with id container_XXX timed out.
  • gitee_流水线搭配 Dockerfile 部署vue项目
  • MetaFox官方版:轻松转换视频,畅享MKV格式的便捷与高效
  • 【Linux基础知识系列】第九十六篇 - 使用history命令管理命令历史
  • std::set_symmetric_difference
  • 4. 图像识别模型与训练策略
  • 解锁AI大模型:Prompt工程全面解析
  • Spring MVC ModelAndView 详解
  • Linux网络基础(一)
  • 【计算机视觉与深度学习实战】01基于直方图优化的图像去雾技术
  • Python入门第3课:Python中的条件判断与循环语句
  • 电商架构测试体系:ZKmall开源商城筑牢高并发场景下的系统防线
  • Dijkstra与Floyd求最短路算法简介
  • 【JAVA高级】实现word转pdf 实现,源码概述。深坑总结
  • Vue3 学习教程,从入门到精通,Axios 在 Vue 3 中的使用指南(37)
  • 在Ubuntu 22.04上安装远程桌面服务