Qt (16)【Qt 事件 —— Qt 事件简介 | 如何重写相关的 Event 函数】

embedded/2024/10/7 12:53:32/

阅读导航

  • 引言
  • 一、事件介绍
  • 二、如何重写相关的 Event 函数
    • 1. 事件的处理简介
    • 2. 示例重写鼠标相关的 Event 函数
      • (1)新建Qt项目,设计UI文件
      • (2)新添加MyLabel类
      • (3)重写enterEvent()方法和leaveEvent()方法
      • (4)提升窗口中的Lable基类
  • 总结

引言

在上一篇文章里,我们学习了Qt中窗口的基础知识,了解了如何创建和管理GUI界面。但要让这些窗口“活”起来,就需要处理用户的各种操作,比如点击、键盘输入等。这些操作在Qt中是通过事件来传达的。因此,接下来我们将深入探讨Qt的事件系统,看看它是如何捕获、传递和处理这些事件的。通过了解Qt的事件处理机制,您将能更好地控制应用程序的行为,使其更加灵活和响应迅速。让我们开始吧!

一、事件介绍

事件是在应用程序运行过程中,无论是内部还是外部发生的各种事情或动作的统称。在Qt框架中,这一概念通过具体的对象来实现,这些对象均继承自一个名为QEvent的抽象基类。

Qt事件可以大致分为两类:一类是由用户交互直接触发的,如键盘事件、鼠标事件等,它们直接响应于用户的操作;另一类则是由系统或Qt框架内部自动管理和发出的,如定时器事件,这些事件不直接依赖于用户的直接操作,而是根据系统状态或应用程序的需求自动产生。常见的Qt事件如下:

在这里插入图片描述
🎯常见事件描述

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

Qt通过事件处理机制,使得开发者能够灵活地对这些事件进行监听和响应,从而构建出丰富、动态的用户界面和应用程序逻辑。

二、如何重写相关的 Event 函数

1. 事件的处理简介

在Qt中,处理事件的一种常用方法是重写(Override)相关的Event函数。Qt设计了许多事件处理函数作为虚函数,这意味着开发者可以在自己的类中重新实现(即重写)这些函数来自定义事件的行为。

2. 示例重写鼠标相关的 Event 函数

实现功能:当需要处理鼠标的进入和离开事件时,可以直接在自定义的QWidget或其子类中重写enterEvent(QEvent *event)leaveEvent(QEvent *event)这两个函数

这两个函数的原型通常如下所示:

在这里插入图片描述
在这里插入图片描述

通过在自定义的类中实现这些函数,可以定义当鼠标进入或离开你的窗口或控件时应该执行的操作。

(1)新建Qt项目,设计UI文件

新建Qt项目
在这里插入图片描述
设计UI文件
在这里插入图片描述

(2)新添加MyLabel类

在这里插入图片描述
在这里插入图片描述

(3)重写enterEvent()方法和leaveEvent()方法

在这里插入图片描述
在这里插入图片描述

(4)提升窗口中的Lable基类

🎯在UI文件中选中Label,右键------>提升为…

在这里插入图片描述
🎯当点击"提升为…"之后,弹出如下对话框
在这里插入图片描述
执行效果如下:当鼠标进入设计好的标签之后,就会在应用程序输出栏中打印:鼠标进入,出来的时候也会有提示
在这里插入图片描述

总结

我们通过创建一个新的QLabel子类并重写其enterEvent()和leaveEvent()方法,我们能够在鼠标进入或离开标签时改变其行为。随后,利用Qt Designer将UI中的QLabel控件提升为我们自定义的类实例,实现了这些自定义行为的实际应用。这体现了Qt事件处理机制允许开发者轻松扩展控件功能的能力。


http://www.ppmy.cn/embedded/110126.html

相关文章

孩子为什么会有自闭症?

自闭症,这个复杂而神秘的神经发展性障碍,长久以来一直困扰着无数家庭和专业人士。尽管其确切原因尚未被完全揭示,但多年的研究与实践已经为我们提供了多个可能的解释框架。 首先,遗传因素在自闭症的发病中扮演了重要角色。科学家发…

C# 关于多线程同步不同实现方式

栏目总目录 AutoResetEvent class MainClass {// the array of consumer threadsprivate static List<Thread> consumers new List<Thread> ();// the task queueprivate static Queue<Action> tasks new Queue<Action>();// the synchronisation o…

828华为云征文 | 华为云X实例服务器上部署知识图谱项目的详细指南

前言 知识图谱作为数据整合、语义分析和人工智能的重要基础&#xff0c;逐渐被广泛应用于各类领域。其通过结构化数据和关系映射&#xff0c;帮助用户更好地理解数据背后的意义。要成功构建和部署知识图谱项目&#xff0c;强大的计算资源和高效的存储查询能力至关重要。华为云X…

揭秘!中医智慧如何温和调控“高压人生”,高血压治疗新视角

在这个快节奏、高压力的时代&#xff0c;高血压这一“隐形杀手”悄然影响着越来越多人的健康。面对西医药物治疗的常见路径&#xff0c;你是否好奇过&#xff0c;博大精深的中医能否在这场血压保卫战中发挥独特作用&#xff1f;今天&#xff0c;就让我们一起揭开中医治疗高血压…

Ubuntu系统安装Gitlab

步骤 1&#xff1a;前提准备 首先&#xff0c;更新你的系统软件包&#xff0c;以确保你有最新的安全补丁和更新&#xff1a; sudo apt update sudo apt upgrade -y步骤 2&#xff1a;安装依赖项 在安装GitLab之前&#xff0c;你需要确保安装了以下必要的依赖项&#xff1a; …

CAN集线器(工业级、隔离式)

型号&#xff1a; MS-HUB-C 概述 MS-HUB 是一款可通过一路 CAN &#xff0c;一路 RS-232为主口扩展出 7 路 CAN 从口的工业级光电隔离型 CAN 分配器。可以有效的实现 CAN 网络的中继、扩展与隔离。采用先进的自动流控技术自动侦测CAN 信号流向。MS-HUB 具备光电隔离功能&#x…

SprinBoot+Vue个性化旅游推荐系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…

MySQL基础——DQL

DQL&#xff08;Data Query Language&#xff0c;数据查询语言&#xff09;是SQL中的一个子集&#xff0c;主要用于查询数据库中的数据。DQL的核心语句是 SELECT&#xff0c;它用于从一个或多个表中提取数据&#xff0c;并能够通过各种条件进行过滤、排序和聚合操作。下面是DQL…