【QT:QT事件】

news/2025/3/21 2:27:01/

目录

事件概念:

事件处理:

事件的处理方式:

处理鼠标进入和离开事件:

鼠标事件:

鼠标按下事件:

鼠标释放事件:

鼠标双击事件:

键盘事件:

处理按键事件 

定时器: 


事件概念:

事件是应用程序内部或者外部产生的事情或者动作的统称。在Qt中使用一个对象来表示一个事件,所有的QT事件均继承与抽象类QEvent,事件是由系统或者Qt平台本身在不同的时刻发出的。用户进行的各种操作会产生事件,程序员给事件关联上处理函数,当事件触发时就能够执行到对应的代码。

事件本身是操作系统提供的机制,QT把这种机制进行了封装,但对于事件对应的代码书写并不方便,于是Qt对事件机制进行了进一步的封装,这就是信号槽。信号槽就是对事件的进一步封装,事件就是信号槽的底层机制

事件处理:

通俗来讲就是将代码和事件关联起来,当事件触发就到指定的代码中执行处理 。

事件的处理方式:

  • 让当前类重写某个事件处理函数(多态机制,创建子类继承Qt已有的类,在子类中重写父类的事件处理函数,通过多态机制,执行重写的子类函数)

处理鼠标进入和离开事件:

 

这里虽然重写了这两个函数,但是事件却没有得到处理,原因是当前在界面上创建的label其实是QLabel而不是自定义写的label,必须要确保界面上的label是自定义的那个类才可以。那么如何将Label转为自定义的label?点到图形化界面后,将界面的QLabel鼠标右击,点击提升为...将需要转换的类添加上去即可

鼠标事件:

鼠标按下事件:

通过事件获取鼠标点击的位置

mousePressEvent函数按下左右,滚轮都可以触发

鼠标释放事件:

鼠标双击事件:

以上操作都是在自定义的Label中完成的,此时鼠标只有在Label范围内进行动作时才会捕捉到,以上操作也可放在Widget中完成,那么鼠标的在整个窗口的各个动作都能捕获到。

此外,鼠标移动不同于鼠标按下,鼠标移动当鼠标随便移动就可以产生大量事件,当进行事件捕获时进行一些复杂的逻辑时,程序的负担就会很重容易产生卡顿,因为Qt为了保证鼠标的流畅,默认情况下不会对鼠标位置进行追踪,追踪鼠标位置需要手动调用(方法为:setMouseTacking) 

键盘事件:

处理按键事件 

捕获键盘按键方法:keyPressEvent(QKeyEvent*)

定时器: 

QTimer实现定时器功能,而QTimer基于QTimeEvent支撑的

定时器的方法
startTimer启动定时器
KiilTimer关闭定时器

使用timerEvent比QTimer复杂,手动管理timerId,此外还需要区分该函数是由那个Timer引起的

窗口移动和大小改变事件:
 

事件
moveEevent窗口移动时触发的事件
resizeEvent窗口大小改变时触发的事件

 

 


http://www.ppmy.cn/news/1580743.html

相关文章

免费开源的NAS解决方案:TrueNAS

TrueNAS是业内知名的FreeNAS系统的升级版,是一款开源的网络存储系统,具有高性能、稳定性和易用性等优点。 TrueNAS目前有三个版本,分别是TrueNAS CORE、TrueNAS ENTERPRISE、TrueNAS SCALE。其中,TrueNAS CORE基于FreeBSD开发&…

《算法笔记》9.4小节——数据结构专题(2)->二叉查找树(BST) 问题 A: 二叉排序树

题目描述 输入一系列整数&#xff0c;建立二叉排序数&#xff0c;并进行前序&#xff0c;中序&#xff0c;后序遍历。 输入 输入第一行包括一个整数n(1<n<100)。接下来的一行包括n个整数。 输出 可能有多组测试数据&#xff0c;对于每组数据&#xff0c;将题目所给数…

主流区块链

文章目录 主流链1. Solana特点&#xff1a;适用场景&#xff1a;工具链&#xff1a; 2. Binance Smart Chain (BSC)特点&#xff1a;适用场景&#xff1a;工具链&#xff1a; 3. Avalanche特点&#xff1a;适用场景&#xff1a;工具链&#xff1a; 4. Polkadot特点&#xff1a;…

Error response from daemon: unknown or invalid runtime name: nvidia解决办法

编辑/etc/docker/daemon.json文件在json中添加内容 "runtimes": {"nvidia": {"path": "nvidia-container-runtime","runtimeArgs": []}}运行命令 sudo systemctl daemon-reload sudo systemctl restart docker参考连接 htt…

Leetcode Hot 100 79.单词搜索

1.题目 79. 单词搜索 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格…

荣耀手机怎么录制屏幕?屏幕录制后为视频加水印更有“安全感”

在数字时代&#xff0c;屏幕录制已经成为记录和分享信息的重要方式之一。无论是记录游戏的高光时刻&#xff0c;还是制作教学视频&#xff0c;亦或是保存重要的线上会议内容&#xff0c;屏幕录制都能轻松搞定。 荣耀手机作为一款功能强大的设备&#xff0c;自然也提供了便捷的…

【华三】路由器交换机忘记登入密码或super密码的重启操作

【华三】路由器交换机忘记登入密码或super密码的重启操作 背景步骤跳过认证设备&#xff1a;路由器重启设备翻译说明具体操作 跳过当前系统配置重启设备具体操作 背景 当console口的密码忘记&#xff0c;或者说本地用户的密码忘记&#xff0c;其实这时候是登入不了路由器的&am…

【数据结构面试篇】

数据结构有哪些分类&#xff1f;它们各自的使用场景是什么&#xff1f; 数据结构是计算机存储和组织数据的方式&#xff0c;合理选择数据结构能显著提升程序效率。以下是主要分类、特点及使用场景的总结&#xff1a; 一、线性结构 1. 数组&#xff08;Array&#xff09; 特点…