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

news2024/9/24 1:29:47

阅读导航

  • 引言
  • 一、事件介绍
  • 二、如何重写相关的 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.coloradmin.cn/o/2126588.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分享一个爬虫数据挖掘 农村产权交易数据可视化平台 数据分析大数据 Java、python双版(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…

形式向好、成本较低、可拓展性较高的名厨亮灶开源了。

简介 AI视频监控平台, 是一款功能强大且简单易用的实时算法视频监控系统。愿景在最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,减少企业级应用约 95%的开发成本,在强大视频算法加…

建筑业首个通过算法备案的大模型发布

建筑业首个通过算法备案的大模型发布 9月10日上午,上海建工四建集团与中国建筑出版传媒有限公司携手推出了Construction-GPT PRO版,这是一款专为建筑行业设计的施工知识大模型。该模型能够理解和生成长达8000字符的内容,其回答速度达到毫秒级…

LLM大模型学习:NLP三大特征抽取器(CNN/RNN/TF)

NLP三大特征抽取器(CNN/RNN/TF) 结论:RNN已经基本完成它的历史使命,将来会逐步退出历史舞台;CNN如果改造得当,将来还是有希望有自己在NLP领域的一席之地;而Transformer明显会很快成为NLP里担当…

Linux 信息安全:构建坚固的防御体系

摘要: 本文围绕 Linux 信息安全展开。阐述了 Linux 在信息技术中的重要地位,强调信息安全的重要性以及 Linux 信息安全面临复杂网络环境、演变攻击手段与内部威胁等挑战。详细介绍了 Linux 系统的安全架构与机制,包括用户与权限管理、文件系统…

Hexo框架学习——从安装到配置

第一章 Hexo入门 Hexo 是一个快速、简洁且高效的博客框架。 1.1 Hexo的下载与安装 1.1.1 Hexo下载 在下载Hexo之前,我们需要确保电脑上已经安装好以下软件: Node.js (Node.js 版本需不低于 10.13,建议使用 Node.js 12.0 及以上版本) Git…

你真的懂吗系列——串口通信

你真的懂吗 文章目录 你真的懂吗前言二、什么是串口通信二、STM32的串口三、什么是数据通信 前言 串口通信是一种设备间常用的串行通信方式,串口按位(bit)发送和接收字节。尽管比字节(byte)的串行通信慢,但…

机器学习算法-决策树算法

文章目录 什么是决策树?决策树的基本概念决策树的构建过程决策树的优缺点优点:缺点: 决策树的优化决策树的应用决策树的实现工具 特征选择准则1. 信息增益(Information Gain)计算公式:熵(Entrop…

ubuntu20.4安装Qt5.15.2

ubantu20.4镜像下载地址: https://releases.ubuntu.com/focal/ubuntu-20.04.6-desktop-amd64.iso Qt5.15.2下载地址: https://download.qt.io/official_releases/online_installers/ 安装步骤 1、进入地址后选择对应安装包,我这是ubuntu…

Redis进阶(二)--Redis高级特性和应用

文章目录 第二章、Redis高级特性和应用一、Redis的慢查询1、慢查询配置2、慢查询操作命令3、慢查询建议 二、Pipeline三、事务1、Redis的事务原理2、Redis的watch命令3、Pipeline和事务的区别 四、Lua1、Lua入门(1)安装Lua(2)Lua基…

虚幻引擎 | (类恐鬼症)玩家和NPC语音聊天

SETUP:工具和插件 工具:elevenlabs或者讯飞,用于Speech Synthesis(语音合成,text to speech)。 https://elevenlabs.io/app/speech-synthesis/text-to-speechhttps://elevenlabs.io/app/speech-synthesis…

海外云手机——跨国业务的高效工具

海外云手机是一种基于云计算的虚拟手机服务,依托海外服务器实现跨国网络访问。这项服务不仅具备传统智能手机的所有功能,还突破了地域限制,为跨国业务提供更加便捷、高效、安全的解决方案。 随着全球化的加速和互联网的快速普及,跨…

C语言深入理解指针五(18)

文章目录 前言一、回调函数是什么?二、qsort使用举例使用qsort函数排序整型数据使用qsort函数排序结构数据 三、qsort的模拟实现总结 前言 本篇将会很有意思! 一、回调函数是什么? 回调函数就是一个通过函数指针调用的函数。   如果你把函数…

代码随想录27期|Python|Day52|​动态规划|​647. 回文子串|516. 最长回文子序列

本文是动态规划的回文字符串部分。 647. 回文子串 本题需要搞清楚dp的定义、遍历顺序和递推公式。 1、dp数组的定义 由图片可知,不同于之前的dp数组直接定义为当前遍历到的位置处题目所要求得值,而是应该定义为i为开始,j为结束的子串是否是…

探索音视频SDK的双重核心:客户端与服务端的协同作用

在当今的数字化时代,音视频技术已成为连接人与人、人与世界的重要桥梁。从社交娱乐到在线教育,从远程医疗到视频会议,音视频技术的应用无处不在,极大地丰富了我们的生活方式和工作模式。本文将深入探讨音视频SDK的两大核心类别——…

横版闯关手游【全明星时空阿拉德】Linux手工服务端+运营后台+双app端

横版闯关手游【时空阿拉德】(【全明星阿拉德】)阿拉德系列2022整理Linux手工服务端余额充值后台安卓苹果双端。 运营后台看目录结构是thinkphp开发的。 代码免费下载:百度网盘

DNAT和SNAT实践

NAT分SNAT和DNAT两种。从名字上区分: SNAT将源IP地址替换为出口网络的IP地址,以便内网地址可以访问外网服务。一般受限于公网IP有限,一个内网集合想访问外网服务,则用统一的出口做代理。出口配置公网IP,帮助从此发出的…

Java重修笔记 第五十四天 坦克大战(二)常用的绘图方法、画出坦克图形

常用的绘图方法 1.设置当前画笔的颜色,可多次调用 public abstract void setColor(Color c) 参数:c -颜色 2. 画一条直线 public abstract void drawLine(int x1, int y1, int x2, int y2) 参数:x1 - 第一个点的 x坐标。 y1 - 第一点的 y坐…

Git使用—把当前仓库的一个分支push到另一个仓库的指定分支、基于当前仓库创建另一个仓库的分支并推送到对应仓库(mit6828)

目录 背景提示 将当前仓库的一个分支push到另一个仓库的指定分支 直接基于仓库rep1中的某个分支创建新的分支并将其推送到目标仓库rep2 补充 参考链接 背景提示 最近打算做一下mit6.828的项目,这个仓库使用问题困扰了自己一段时间,由于6828官方提供…

92、K8s之ingress下集

一、ingress 1.1、两种部署方式 1、ingress------------deployment nodeport ​ daemonset hostnetwork----每台设备只能有一个pod,因为直接使用宿主机的端口,所以只能开启一个pod。 2、ingress------svc------deployment里面的pod,这种…