【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念


  • 博客主页:Duck Bro 博客主页
  • 系列专栏:Qt 专栏
  • 关注博主,后期持续更新系列文章
  • 如果有错误感谢请大家批评指出,及时修改
  • 感谢大家点赞👍收藏⭐评论✍

Qt系统相关 | Qt事件 | 事件的介绍及基本概念

文章编号:Qt 学习笔记 / 59

文章目录

  • [Qt系统相关 | Qt事件 | 事件的介绍及基本概念](#Qt系统相关 | Qt事件 | 事件的介绍及基本概念)
    • 一、Qt事件介绍
      • [1. 事件简介](#1. 事件简介)
      • [2. 事件的处理](#2. 事件的处理)
    • 二、Qt事件分类
      • [1. 事件分类](#1. 事件分类)
      • [2. 常见的事件叙述](#2. 常见的事件叙述)

一、Qt事件介绍

1. 事件简介

在Qt中,事件是指发生在应用程序中的各种动作或事物,如鼠标点击、键盘输入、窗口关闭等。Qt的事件机制基于事件循环,即应用程序不断地从操作系统接收事件并进行处理。

Qt中的事件通过事件对象(QEvent)来表示,每个事件对象都有一个类型(Type)和一些特定的属性。当事件发生时,Qt会将事件对象发送给相关的对象进行处理。需要注意的是,Qt支持事件的继承和重载,开发者可以根据自己的需求来重写事件处理函数。

在Qt中,事件的处理通常是通过重写事件处理函数来实现的。每个QObject派生类都有一个事件处理函数(event()函数),开发者可以在该函数中实现对特定事件的处理逻辑。例如,可以在QWidget的event()函数中处理鼠标点击事件、键盘事件等。

2. 事件的处理

事件处理⼀般常⽤的⽅法为:重写相关的 Event 函数。

在 Qt 中,⼏乎所有的 Event 函数都是虚函数,所以可以重新实现。如:在实现⿏标的进⼊和离开事件时,直接重新实现 enterEvent() 和 leaveEvent() 即可。

enterEvent() 和 leaveEvent() 函数原型如下:


二、Qt事件分类

1. 事件分类

QMouseEvent包含了鼠标事件的各种信息,例如鼠标的位置、按下的按键类型、按下的按键的状态等。它可以用于捕捉鼠标的按下、释放、移动等事件,并对这些事件做出相应的处理。

QKeyEvent包含了键盘事件的各种信息,例如按下的键值、按下的键的状态、是否按下修饰键(如Shift、Ctrl等)等。它可以用于捕捉键盘的按下、释放、按住等事件,并对这些事件做出相应的处理。

QTimerEvent包含有关定时器ID和定时器类型的信息。它可用于根据定时间隔触发特定操作或更新用户界面。

QDropEvent是一个在Qt应用程序中拖放操作发生时发送给QDropEvent接收者的事件。它包含关于拖放操作的各种信息,包括拖动的数据、拖放的位置和操作的类型。

QInputEvent是Qt中用于表示输入事件的基类。它是一个抽象类,不能直接实例化,而是通过其具体的子类来表示不同类型的输入事件,如键盘事件、鼠标事件等。

QPaintEvent是Qt中用于表示绘图事件的类。它是QObject类的子类,用于通知部件需要重新绘制自己。当部件需要进行绘制时,Qt会自动创建一个QPaintEvent对象,并将其发送给部件的paintEvent()函数进行处理。在paintEvent()函数内部,可以通过调用部件的绘图函数,如QPainter的绘图函数,来完成具体的绘制操作。

2. 常见的事件叙述

事件名称 描述
鼠标事件 鼠标左键、鼠标右键、鼠标滚轮,鼠标的移动,鼠标按键的按下和松开
键盘事件 按键类型、按键按下、按键松开
定时器事件 定时时间到达
进⼊离开事件 鼠标的进⼊和离开
滚轮事件 鼠标滚轮滚动
绘屏事件 重绘屏幕的某些部分
显示隐藏事件 窗口的显示和隐藏
移动事件 窗口位置的变化
窗口事件 是否为当前窗口
⼤小改变事件 窗口⼤小改变
焦点事件 键盘焦点移动
拖拽事件 ⽤鼠标进行拖拽

相关推荐
兆。2 分钟前
掌握 PyQt5:从零开始的桌面应用开发
开发语言·爬虫·python·qt
尘浮生5 分钟前
Java项目实战II基于Spring Boot的光影视频平台(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·maven·intellij-idea
明月看潮生25 分钟前
青少年编程与数学 02-003 Go语言网络编程 15课题、Go语言URL编程
开发语言·网络·青少年编程·golang·编程与数学
cuisidong199728 分钟前
5G学习笔记三之物理层、数据链路层、RRC层协议
笔记·学习·5g
乌恩大侠30 分钟前
5G周边知识笔记
笔记·5g
南宫理的日知录36 分钟前
99、Python并发编程:多线程的问题、临界资源以及同步机制
开发语言·python·学习·编程学习
逊嘘1 小时前
【Java语言】抽象类与接口
java·开发语言·jvm
van叶~1 小时前
算法妙妙屋-------1.递归的深邃回响:二叉树的奇妙剪枝
c++·算法
Half-up1 小时前
C语言心型代码解析
c语言·开发语言
knighthood20011 小时前
解决:ros进行gazebo仿真,rviz没有显示传感器数据
c++·ubuntu·ros