【Qt教程】3.1 - Qt5 event事件、Label控件的鼠标事件捕获

2023-11-08

1. event简介

事件(event)是由系统或者Qt本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件。一些事件在对用户操作做出响应时发出,如键盘事件等。另一些事件则是由系统自动发出,如计时器事件。

当事件发生时,Qt将创建一个事件对象。Qt中所有的事件类都继承于QEvent。在事件对象创建完毕后,Qt将这个事件对象传递给QObject的event()函数。event()函数并不直接处理事件,而是按照事件对象的类型分派给特定的事件处理函数(event handler)

 

帮助手册,搜索QEvent。查看Type。

 

这里面包含许多事件,我们以鼠标的事件为例,鼠标事件全部继承于QMouseEvent类。

 

再去找enterEvent,类型为虚函数,所以可以被重写,来实现事件的回调处理。

 

2. Event示例 - enterEvent、leaveEvent

  • GitHub源码仓库:QT学习例程
  • 示例:新建一个label,鼠标进入/退出会触发事件,用户对捕获的事件进行打印处理。

新建widget工程。拖入Label控件。

 

为方便观察,添加上边框,右下角属性,QFrame,frameShape,选择Box。

 

因为我们要对原有的Label功能做一些改动,添加事件处理,属于自定义控件。

但由于这个控件的外观没什么变化,所以不需要重新创建控件,只需创建类。

 

添加自定义控件:

工程 , Add New... , C++ , C++ Class,填入控件名称myLabel,基类选择QWidget,下一步,完成。

之后就完成了新建一个类,多出了myLabel.c与myLabel.h。

对 [virtual protected] void QWidget::enterEvent(QEvent *event)进行重写。

.h文件中声明函数名称,.cpp文件中实现函数。virtual可加可不加,.h中不要有作用域。

 

自定义控件由于创建的时候继承的是QWidget,而我们调用的控件为Label。所以将继承的父类修改为为 QLabel。

 

回到UI,选择刚刚拖入的Label控件,右键,提升为,myLabel,添加,提升。

  • 运行,实验现象:

 

3. 其他鼠标事件 - 移动mouseMoveEvent

除此之外,Label中还有很多事件可以重写:红框框中的是Label中鼠标的事件。

 

重写后,实验现象:(注意:移动必须要在鼠标按下时才能触发,可以通过更改属性修改为放置就会触发)

 

4. 其他鼠标事件 - 获取鼠标坐标位置

如果我们要获取鼠标的xy坐标:对应这几个参数。

x/y():鼠标相对于控件的坐标像素。

globalX/globalY():鼠标相对于整个屏幕的坐标像素。

 

打印鼠标坐标:

  • Qt的格式化字符串:

QString str = QString("鼠标按下了 x=%1 y=%2").arg(ev->x()).arg(ev->y());

 

5. 其他鼠标事件 - 限定鼠标左键触发/无条件触发

以上的显示鼠标移动,左键可以触发,右键、中键同样也可以触发。如果只想获取左键按下事件,需要对event的鼠标输入参数 QMouseEvent进行选择。

Qt::MouseButton的枚举值

 

如果想限定鼠标左键按下,需要限定事件,由 ev->button() 改为 ev->buttons(),并且事件要 &而不是 ==

 

由于鼠标移动事件是默认需要鼠标按下的。如需要不按下,通过代码在构造函数中设置鼠标追踪属性。

setMouseTracking(true);

 

GitHub源码仓库:QT学习例程​​​​​​​

视频P31,这节内容比较多有些杂。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Qt教程】3.1 - Qt5 event事件、Label控件的鼠标事件捕获 的相关文章

随机推荐

  • Unity 关卡跳转——开始界面切换到游戏场景的实现

    1 在已有关卡的基础上 另外新建一个关卡 将其命名为start并进行保存 2 在新建立的start关卡中创建TitleScreen cs脚本 代码如下 using System Collections using System Collec
  • ubuntu装指定分区_Ubuntu安装时怎样分区

    1 swap交换分区 一般为你机器内存的两倍 少于这个容量 系统无法进入休眠 实质是硬盘上的交换空间而非分区 所以没有格式 默认休眠将数据储存于此 能够取消 如不用swap必须再设定方可休眠 多数有1GB内存的桌面用户仅仅要1 5GB sw
  • Spring Boot 项目介绍

    Spring Boot 源码学习系列 Spring Boot 项目介绍 引言 项目介绍 1 设计理念 2 设计目标 3 源代码的目录结构 4 整体架构 总结 参考 引言 作为学习过 Java 的软件开发者 相信都知道 Spring 这一伟大
  • Linux基本命令的使用和服务器的部署

    1 云服务器的部署 以腾讯云为例 下载终端工具 Xshell 2 Linux常见命令 1 ls 2 pwd 3 cd 4 clear 清屏 5 touch 6 cat 查看文件内容 7 mkdir 创建目录 8 rm 删除文件 目录 9 c
  • TIMESAT提取物候信息操作流程

    TIMESAT提取物候信息操作流程 软件环境 Matlab R2014a TIMESAT3 2 数据介绍 MODIS A3或Q1的NVI NDVI 均测试过这个流程 可行 大拇指 TIMESAT输入n年数据 提取n 1年的物候参数 通常用三
  • MTK/联发科MT6877 5G智能手机应用处理器功能规格书/datasheet

    MT6877 设备 见图 1 1 具有集成的蓝牙 FM WLAN 和 GPS 模块 是一个高度集成的基带平台 结合了调制解调器和应用处理子系统 以支持 LTE 5G NR 和 C2K 智能手机应用 该芯片集成了两个运行频率高达 2 4 GH
  • 图像搜索引擎1

    图像搜索引擎1 使用Python颜色直方图在数据集中搜索视觉上相似的图像 这篇博客将介绍如何从头到尾创建图像搜索引擎 第一步是选择一个图像描述符 使用3D RGB直方图来表征图像的颜色 然后通过提取特征向量 即直方图 使用描述符对数据集中的
  • MATLAB学习笔记_Day10_摘要、问题假设、灵敏度分析

    学习视频 零基础教程 老哥 数学建模算法 编程 写作和获奖指南全流程培训 文章目录 1 摘要的重要性 摘要分析 2 假设的重要性 举例 3 灵敏度分析 灵敏度分析及适用参数类型 举例分析 敏感性分析总结 1 摘要的重要性 摘要分析 2 假设
  • android 调用另一个activity 简单做法

    懒了一下午 终于用不到一个小时的时间 实现了一个activity调用另一个activity 的宏远 哈哈哈哈 本做法纯属我这菜鸟的入门 本小教程不提供新建activity 的办法哈 百度一大把的 目的 我想在主窗口中调用另一个activit
  • PowerDesigner 反向工程,生成ER图

    建立好一个完整的oracle数据库之后 昨天老师让我用PL SQL Developer导出表结构的PDM文件 显示该数据库的ER图 仔细研究了一个晚上 决定放弃使用PL SQL Developer生成Oracle的ER图 捣弄了好久都没找到
  • yaml 数组_【大强哥-k8s从入门到放弃04】Yaml语法解析

    依然小福利 Python 零基础入门 2020感谢走进我的生命 Python 已更新至206集 哔哩哔哩 干杯 bilibili www bilibili com 一 K8S名称空间 嗯 名称空间是个小插曲 yaml在下面 1 Yaml文件
  • OpenCV图像腐蚀膨胀算法的Python模拟实现

    前往老猿Python博客 https blog csdn net LaoYuanPython 一 引言 在 OpenCV Python图像矩阵不扩充边界腐蚀膨胀函数处理算法探究 https blog csdn net LaoYuanPyth
  • c++模板之萃取

    假如 我们要设计一个 Copy的模板函数 我们为了提高效率采用memcpy 可以这样写 template
  • linux_常用命令

    一 日常使用命令 常用快捷键命令 开关机命令 1 shutdown h now 立刻进行关机 2 shutdown r now 现在重新启动计算机 3 reboot 现在重新启动计算机 4 su 切换用户 passwd 修改用户密码 5 l
  • C++ template高级

    1 Template 高级属性 1 1 可变参数 CTemplatetest cpp 定义控制台应用程序的入口点 include stdafx h include
  • 调整计算机硬盘大小,固态硬盘分区如何合并 自己调整磁盘大小真的很实用

    1 首先在桌面找到 计算机 右键单击 在快捷菜单栏中选择 管理 弹出计算机管理窗口 2 在计算机管理窗口中选择 储存 磁盘管理 在右边就会显示你的分区情况了 3 我们选择一个空间比较大的盘符进行分割 举个例子 我们盘有40G是空余 我们要分
  • 使用 LangChain 和 DeepInfra 构建用于支持客户的聊天机器人

    您可能在日常在线互动中遇到过聊天机器人 但您是否考虑过为这些数字助手提供支持的技术 聊天机器人 特别是在客户支持领域 已成为现代企业的重要组成部分 可以在提高效率的同时增强客户服务 今天 我们将深入探讨LangChain和DeepInfra
  • 网络操作相关命令

    netstat r 显示路由表 I i 显示网络接口信息 s 收发包统计信息 v 显示详细信息 包括unix socket 连接状态和路径 e 还能显示user p 显示使用它的进程 l listening a 所有的 n 不解析域名 用户
  • SaltStack_00_基本操作

    文章目录 0x00 背景 0x01 基础环境安装 0x02 执行命令 0x03 数据系统Grains Pillar 0x00 背景 OS CentOS 7 SaltStack 2015 5 10 Lithium 0x01 基础环境安装 按照
  • 【Qt教程】3.1 - Qt5 event事件、Label控件的鼠标事件捕获

    1 event简介 事件 event 是由系统或者Qt本身在不同的时刻发出的 当用户按下鼠标 敲下键盘 或者是窗口需要重新绘制的时候 都会发出一个相应的事件 一些事件在对用户操作做出响应时发出 如键盘事件等 另一些事件则是由系统自动发出 如