文章目录

  • qt系统
    • 事件
    • 处理鼠标事件
    • 鼠标移动事件
    • 处理键盘事件
    • 定时器事件
    • 窗口移动和大小改变事件
    • 结语

很高兴和大家见面,给生活加点impetus!!开启今天的编程之路!!
在这里插入图片描述
作者:٩( ‘ω’ )و260
我的专栏:qt,Linux,C++进阶,C++初阶,数据结构初阶,题海探骊,c语言
欢迎点赞,关注!!

qt系统

事件

事件是应用程序内部或者外部产生的事情或者动作的统称。在qt中由QEvent该类来表示事件,同时,也衍生出了qt中常见的事件。
在这里插入图片描述
分别代表鼠标事件,键盘事件,定时器事件等等。

事件与信号槽的联系:信号槽其实封装了事件,比如qt中内置的信号,但是如果当内置的信号无法达到用户想要的效果时,此时就必须使用事件来完成。

那我们需要如何处理事件呢?
一定是需要使用多态机制,这些事件在父类中都有对应的虚函数,我们所做的就是需要创建子类,在子类中对虚函数进行重写
重写需要满足三同(函数名,参数类型和个数,返回值),我们可以取巧在qt助手中来搜索对应的函数。

我们来看例子:

处理鼠标事件

通过处理该事件,我们能够完成鼠标进入和离开任何控件,并对应发出事件的操作。
我们先来讲一点细节,这里使用label控件,实现当鼠标进入该控件的时候,实现对应的日志打印,同时,鼠标离开该控件的时候,也实现日志的打印。

为什么我这里使用label来实现呢?其实使用什么控件都是可以的,主要就是需要看范围是什么,如果想鼠标进入离开事件并实现日志打印在Widget界面上的话,就需要对QWidget控件的子类进行该信号得重写。

我们先给QLabel创建一个子类label:
在这里插入图片描述
随后我们来完善一下子类的信息,我们需要完善一下构造函数,因为父类的构造函数有参数:
在这里插入图片描述
我们使用qt assistant来搜索enterEvent和leaveEvent,这样保证函数不会写错,同时,我们对该虚函数在子类中完成重写:
在这里插入图片描述
我们运行代码,来看结果,发现日志并没有打印,这个是怎么回事呢?答案其实在ui文件中,我们能够发现,我们创建的label挂在对象树上挂的是什么类型,是QLabel类型:
在这里插入图片描述
我们需要对其进行转换,右键控件->提升为:
在这里插入图片描述
一定要保证提升类名称和我们创建的子类名称是相同的,否则仍然会出现问题(我们子类类型叫label)。
在这里插入图片描述
此时成功修改,这里还有一个细节,一定注意名字不要和类型起的冲突了,再来看结果:
在这里插入图片描述
使用鼠标点击事件我们能够获得鼠标更多的详细信息,比如鼠标的位置,鼠标的操作主要分为两类,鼠标按下,鼠标松开,这两个动作合成一起的话可以构成一个鼠标点击,同理,也有鼠标双击的,直接来看代码:
在这里插入图片描述
注意:此时我点击的是控件左上角位置,此时坐标非常小,说明控件的原点坐标在左上角。
如果说我们使用globalX()函数,此时坐标就以显示屏左上角为基准算的了:
在这里插入图片描述
我们Widget界面是800x600的,此时坐标都达到了875,足以说明此时坐标原点是显示器左上角。

还有其他事件,而且Event中还能够知道用户按下了什么键,比如:左键,右键,来看代码:
在这里插入图片描述
鼠标双击其实也是和上面单击,按下,释放一样的,这里不再演示了。

鼠标移动事件

顾名思义,当鼠标发生移动的时候,该事件就会触发。
来看代码:
在这里插入图片描述
发现这样写,当Widget界面出来之后,我们在Widget界面上进行移动,发现并没有日志打印出来,这个又是什么原因呢?
因为鼠标移动事件轻轻移动鼠标,就会产生大量的鼠标移动事件,就需要有大量的事件需要捕捉,无疑这会对程序造成效率降低,所以我们必须强制设置一下捕捉该信号:
在这里插入图片描述
当我们在Widget构造函数中添加上这一段话的时候,再来看结果:
在这里插入图片描述

处理键盘事件

在以前的学习中,其实我们已经接触过键盘事件,只是我们不知道,其实QShortcut设置快捷键就是使用事件来完成的,就是使用qsequence这个类

这里我们可以通过键盘事件获取单个按键,当然也可以获取两个按键,比如快捷键的方式。

我们这里新创建一个项目,因为创建的Widget本身就是继承QWidget,上面例子只能够在label范围中使用,此时我们就能够在整个Widget中使用了!!
在这里插入图片描述
此时打印日志成功显示,这里还有一个细节,因为我们此时的可操作范围是Widget,我们一定要选择Widget界面之后,再来按下A键,日志才会打印,如果没有选中,此时输入A就是输入法输入的A。
在这里插入图片描述
接下来我们再来实现快捷键的形式,我们需要使用到modifirs这个类,来看代码:
在这里插入图片描述
这里的效果和上面的一样的,按下对应按键,出现日志信息。

定时器事件

定时器事件其实和我们之前学习了定时器类似,而且,定时器时间比控件形式还需要进行手动的管理timeId,还需要区分是哪个timeEvent发出的信号,所以,定时器事件更麻烦一些,推荐使用控件形式,我们直接来看代码:
在这里插入图片描述
随后其实就是一个10秒的倒计时器了,这个结果我们就不在演示了!

窗口移动和大小改变事件

通过窗口位置或者窗口大小的改变就会触发该信号,我们直接来看代码:
在这里插入图片描述
直接来看结果:
在这里插入图片描述
当我们每次移动或者缩放Widget窗口的时候,就会打印日志,你们应该是连续的打印,因为我的qt版本有点老。

结语

感谢大家的认真阅读,不足之处欢迎留言指正,我们下期再见!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/918122.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/918122.shtml
英文地址,请注明出处:http://en.pswp.cn/news/918122.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux机器可直接使用的自动化编译文件

还在为了Linux机器上一遍遍输入编译指令苦恼吗?你需要make指令以及自己的makefile文件!在makefile中写入自己的个性化指令,让编译速度飞起,支持多文件编译一下文件为个人应用,可以直接cp到相应项目的目录,每…

Linux学习-数据结构(哈希表)

1.哈希表1.哈希算法将数据通过哈希算法映射成一个关键值,存放都在同一位置实现数据的高效存储和查找,将时间复杂度尽可能降低至O(1)2.哈希碰撞多个数据通过哈希算法得到的键值相同,称为产生哈希碰撞3.哈希表构建哈希表…

Google Chrome <139.0.7236.0 UAF漏洞

【高危】Google Chrome <139.0.7236.0 UAF漏洞 漏洞描述 Google Chrome 是美国谷歌&#xff08;Google&#xff09;公司的一款Web浏览器。 受影响版本中&#xff0c;OpenscreenSessionHost::ReportAndLogError 方法的参数使用了 std::string_view 类型来接收错误消息。当一…

CentOS8 Stream 网卡配置及重启

在 CentOS 8 Stream 中&#xff0c;网卡配置已由 NetworkManager 管理&#xff0c;传统的 ifcfg-eth0 文件仍然支持&#xff0c;但推荐使用 nmcli 或 nmtui 工具进行网络配置和管理。以下是网卡配置及重启的详细步骤&#xff1a;1. 查看当前网卡状态列出所有网卡bash复制nmcli …

SpringMvc的原理深度剖析及源码解读

一、springmvc启动加载流程1、引入spring-web.jar包时&#xff0c;在这个包的META-INF/services/javax.servlet.ServletContainerInitializer文件中定义的加载类SpringServletContainerInitializer,提供给springmvc实现初始化的操作。2、在SpringServletContainerInitializer类…

【ESP32-menuconfig(1) -- Build Type及Bootloader config】

Build Type Bootloader configmenuconfig介绍Build typeCONFIG_APP_BUILD_TYPECONFIG_APP_BUILD_TYPE_PURE_RAM_APPCONFIG_APP_REPRODUCIBLE_BUILDCONFIG_APP_NO_BLOBSCONFIG_APP_COMPATIBLE_PRE_V2_1_BOOTLOADERSCONFIG_APP_COMPATIBLE_PRE_V3_1_BOOTLOADERSBootloader config…

C++信息学奥赛一本通-第一部分-基础一-第3章-第1节

C信息学奥赛一本通-第一部分-基础一-第3章-第1节 2051 偶数 #include <iostream>using namespace std;int main() {int number; cin >> number;if (number % 2 0) {cout << "yes";} }2052 范围判断 #include <iostream>using namespace std…

自由学习记录(79)

PBRBRDF原理&Unity实现深入浅出_哔哩哔哩_bilibili 进行改进 一个像素点对应一个范围内的 一个微表面--一个由无数个起起伏伏的结构组成的物理结构 屏幕上的每一个像素点&#xff0c;在渲染时通常会被视为一个“微表面”的代表 比如在这个图中&#xff0c;只关心红色的区…

复杂路况误报率↓78%!陌讯轻量化模型在车辆违停识别的边缘计算优化​

一、行业痛点&#xff1a;动态交通场景的识别困境据《2024中国智慧交通白皮书》统计&#xff0c;城市核心路段违停误报率高达35%&#xff0c;主要源于两大难点&#xff1a;​​短暂停靠干扰​​&#xff1a;出租车临时停靠与违停行为特征重叠​​复杂背景干扰​​&#xff1a;树…

大语言模型提示工程与应用:提示词基础使用方式

提示词使用方式 学习目标 在本课程中&#xff0c;我们将学习更多关于提示词使用方式。 相关知识点 提示词使用 学习内容 1 提示词使用 1.1 文本摘要 语言模型最典型的应用场景之一就是文本摘要。我们可以通过以下提示实现基础摘要功能&#xff1a; 提示: 解释抗生素是什么回答&…

常见命令-资源查看-iostat命令实践

文章目录 系统中未安装 iostat 命令 1. 监控CPU与磁盘的基础负载 2. 诊断I/O性能瓶颈 3. 实时监控与动态采样 4. 特定设备或分区的精细化监控 5. 性能测试与基准数据生成 6. 结合其他工具进行综合调优 总结 结果输出速查表 第一部分:CPU统计信息 第二部分:设备/磁盘统计信息(…

WinForm 实战 (进度条):用 ProgressBar+Timer 打造动态进度展示功能

目录 核心控件解析​ ProgressBar 进度条​ Timer 定时器​ 实战案例 常见应用场景​ 总结​ 在 WinForm 桌面应用开发中&#xff0c;进度反馈是提升用户体验的关键环节。无论是文件处理、数据加载还是复杂计算&#xff0c;一个直观的进度条能让用户清晰了解任务状态&…

使用 ast-grep 精准匹配指定类的方法调用(以 Java 为例)

使用 ast-grep 精准匹配指定类的方法调用&#xff08;以 Java 为例&#xff09; 在代码重构、安全审计或静态分析的场景中&#xff0c;我们常常需要匹配某个特定类中定义的方法调用。而 ast-grep 作为一款基于语法树的代码搜索工具&#xff0c;提供了强大的模式匹配功能&#…

Dijkstra?spfa?SPstra?

带负权的无负环最短路问题 对于一张有负边权的图&#xff0c;普通 Dijkstra 就不能用了&#xff0c;比如&#xff1a;正常的 Dijkstra 扩散的节点依次为 1,3,2,41,3,2,41,3,2,4。 这时候可以发现&#xff0c;当点 222 扩散的时候&#xff0c;原本达到点 333 的路径长度是 111&a…

React函数组件灵魂搭档:useEffect深度通关指南!

你以为它只是替代componentDidMount&#xff1f;数据抓取、事件绑定、定时清理...&#xff1f;事实上&#xff0c;useEffect才是函数组件的“幕后操控者”&#xff01;但依赖数组的坑、闭包的陷阱&#xff0c;你真的玩转了吗&#xff1f; 告别“能用就行”&#xff0c;今天带你…

LabVIEW实验室测试框架

在实验室测试场景中&#xff0c;选用合适的 LabVIEW 框架能够极大提升测试效率、优化测试流程并保障测试结果的准确性。介绍几款常用且功能强大的 LabVIEW 测试框架&#xff1a;​TestStand​框架概述​TestStand 是 NI 公司专为测试系统开发设计的一款测试执行管理框架。它能够…

Kiro :从“规范”到“实现”的全流程 AI 助手

为什么是 Kiro Kiro 是一款面向“规范驱动开发”&#xff08;Spec-Driven Development&#xff09;的 AI 开发助手。与只在“写代码”环节辅助不同&#xff0c;Kiro 将“从需求到设计再到实现”的完整链路显性化&#xff0c;把需求、设计、任务分解、代码与测试、文档等全部纳…

【0基础PS】PS工具详解--矩形工具

目录前言一、矩形工具的基础认知​二、矩形工具的选项栏详解​三、矩形工具的绘制技巧​四、矩形工具的实际应用场景​五、常见问题与解决方案​总结前言 在 Photoshop&#xff08;简称 PS&#xff09;的众多绘图工具中&#xff0c;矩形工具是使用率极高的基础工具之一。无论是…

移动端app专项测试

学习目标&#xff1a;app专项测试知识点&#xff0c;其他知识扩充一、app专项&#xff08;app怎么测试/app侧重点在哪&#xff09;1.功能&#xff1a;跟前面功能测试一样&#xff08;跟需求文档提取测试点&#xff0c;编写测试用例&#xff09;2.安装1.不同品牌安装,不同操作系…

Spring Boot 结合 CORS 解决前端跨域问题

Spring Boot 结合 CORS 解决前端跨域问题 1. 背景 在前后端分离的项目中&#xff0c;前端&#xff08;例如 http://localhost:3000&#xff09;调用后端接口&#xff08;例如 http://localhost:8080&#xff09;时&#xff0c;浏览器会因为 同源策略 限制而阻止请求&#xff0c…