【Qt】Qt系统 | Qt事件| 鼠标事件

文章目录

  • 鼠标事件
    • 鼠标点击事件
    • 鼠标释放事件
    • 鼠标双击事件
    • 鼠标移动事件
  • 滚轮事件

在 Qt 中,鼠标事件是用 QMouseEvent 实现的。当在窗口中按下鼠标或者移动鼠标时,都会产生鼠标事件
在这里插入图片描述


鼠标事件

鼠标点击事件

鼠标按下时通过 虚函数 mousePressEvent() 来捕获的。函数原型如下:
在这里插入图片描述
QMouseEvent类 可以通过 button() 函数获取鼠标如何触发该事件(左键/右键…),其函数原型如下:
在这里插入图片描述
返回值是 QMouseEvent::Buttons,这是一个枚举类
在这里插入图片描述

  • Qt::LeftButton:左键
  • Qt::RightButton:右键
  • Qt::MidButton:滚轮键按下

代码示例:捕获鼠标按下事件

void Widget::mousePressEvent(QMouseEvent *event)
{if(event->button() == Qt::LeftButton)qDebug() << "鼠标左键按下";else if(event->button() == Qt::RightButton)qDebug() << "鼠标右键按下";else if(event->button() == Qt::MidButton)qDebug() << "滚轮中键按下";
}

运行结果如下:
在这里插入图片描述


鼠标释放事件

鼠标释放就是按下后,松开的那一瞬
鼠标释放事件是通过 虚函数 mouseReleaseEvent() 捕获的。函数原型如下:
在这里插入图片描述
也可以通过 button() 获取是哪个按键释放

代码示例:

void Widget::mouseReleaseEvent(QMouseEvent *event)
{if(event->button() == Qt::LeftButton)qDebug() << "鼠标左键释放";else if(event->button() == Qt::RightButton)qDebug() << "鼠标右键释放";else if(event->button() == Qt::MidButton)qDebug() << "滚轮中键释放";
}

运行结果如下:
在这里插入图片描述
mousePressEvent() 是按下就会触发,mouseReleaseEvent() 是松开鼠标才触发

鼠标双击事件

鼠标双击事件通过 虚函数 mouseDoubleClickEvent() 捕获,其函数原型如下:
在这里插入图片描述

代码示例:

void Widget::mouseDoubleClickEvent(QMouseEvent *event)
{if(event->button() == Qt::LeftButton)qDebug() << "鼠标左键双击";
}

运行结果如下:
在这里插入图片描述

若没有对双击事件进行捕获,也不会触发鼠标按下事件
在这里插入图片描述


鼠标移动事件

鼠标移动事件是通过 虚函数 mouseMoveEvent() 捕获的。其函数原型如下:
在这里插入图片描述
但是鼠标移动是很频繁触发的,为了保证CPU效率,只重写虚函数不会触发事件处理函数
还需要通过 setMouseTracking() 来追踪鼠标的位置,函数原型如下:
在这里插入图片描述

setMouseTracking() 默认是 false,需要设置为 true,才能实时捕获鼠标位置信息。否则只有当鼠标按下时才能捕获其位置信息

代码示例:实时显示鼠标位置

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//设置鼠标追踪捕获setMouseTracking(true);
}
void Widget::mouseMoveEvent(QMouseEvent *event)
{//获取鼠标位置QString pos = QString("[%1, %2]").arg(event->x()).arg(event->y());qDebug() << "鼠标当前位置:" << pos;
}

运行结果如下:
在这里插入图片描述


滚轮事件

在 Qt 中,鼠标滚轮事件是通过 QWheelEvent类 实现的。
通过 虚函数 wheelEvent() 捕获滚轮事件,其函数原型如下:
在这里插入图片描述

滚轮滑动的距离可以通过 delta() 函数获取。函数原型如下:
在这里插入图片描述
返回值代表滚轮滑动的距离。正数表示滚轮相对于用户向前滑动,负数表示滚轮相对于用户向后滑动

代码示例:记录滑轮滚动的距离

void Widget::wheelEvent(QWheelEvent *event)
{static int x = 0;x += event->delta();if(x > 0)qDebug() << "滚轮向前滚动:" << x;else if(x < 0)qDebug() << "滚轮向后滚动:" << x;
}

运行结果如下:
在这里插入图片描述

结束语
感谢你的阅读
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。
在这里插入图片描述

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

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

相关文章

数学建模学习(118):牛顿冷却定律的原理解析、案例分析与Python求解

介绍来源:2020全国大学生数学建模竞赛论文展示(A070) ,这里我们详细完整的对该优秀论文的方法进行学习和实践。 文章目录 1. 牛顿冷却定律的定义2. 牛顿冷却定律公式3. 牛顿冷却定律的推导4. 牛顿冷却定律的应用方法5. 牛顿冷却定律的验证6. 牛顿冷却定律的图形7. 案例一7.…

线程安全是什么问题?如何引起?死锁是啥?如何解决?

目录 一、什么是线程不安全&#xff1f; 二、如何引起的线程安全&#xff1f;怎么解决&#xff1f; 1&#xff09;CPU调度执行是随机的&#xff0c;抢占式执行&#xff08;根本原因&#xff0c;硬件层面咱们无法干预&#xff09; 2&#xff09;多个线程&#xff0c;对同一变…

服务端事件(Server-Sent Events):实现实时Web通信的利器

标题&#xff1a;服务端事件&#xff08;Server-Sent Events&#xff09;&#xff1a;实现实时Web通信的利器 引言 在现代Web应用中&#xff0c;实现实时通信是一个常见需求。服务端事件&#xff08;Server-Sent Events, SSE&#xff09;是一种允许服务器主动向客户端发送数据…

【Hot100】LeetCode—105. 从前序与中序遍历序列构造二叉树

目录 1- 思路递归 2- 实现⭐105. 从前序与中序遍历序列构造二叉树——题解思路 3- ACM 实现 原题连接&#xff1a;105. 从前序与中序遍历序列构造二叉树 1- 思路 递归 前序&#xff1a;中左右中序&#xff1a;左中右 让前序的第一个元素作为中序的分割点 分割思路 1- 递归…

做个实验

做个实验 #include <bits/stdc.h> using namespace std; #define int long long #define ll __int128_t #define ar array<int, 2> #define arr array<int, 3> int n, m, k, inf 1LL << 61, mod 998244353;// 1e97; const int N 5e5 50;void sol…

使用gitee存储项目

gitee地址&#xff1a;Gitee - 基于 Git 的代码托管和研发协作平台 创建gitee远程仓库 将远程仓库内容拉取到本地仓库 复制下面这个地址 通过小乌龟便捷推送拉取代码&#xff1a;https://blog.csdn.net/m0_65520060/article/details/140091437

基于51单片机的百叶窗proteus仿真

地址&#xff1a;https://pan.baidu.com/s/19M6jeTIHJcyDBGNx4H9nTA 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectron…

RabbitMQ的核心概念

RabbitMQ是一个消息中间件&#xff0c;也是一个生产者消费者模型&#xff0c;负责接收&#xff0c;存储和转发消息。 核心概念 Producer 生产者&#xff0c;是RabbitMQ Server的客户端&#xff0c;向RabbitMQ发送消息。 Consumer 消费者&#xff0c;是RabbitMQ Server的客…

快手怎么免费的去掉视频水印?分享这三个工具给你

​ 我们经常会遇到想要保存的视频带有水印&#xff0c;这不仅影响美观&#xff0c;也不利于分享。为了解决这个问题&#xff0c;我将分享三个免费去除视频水印的工具&#xff0c;帮助你轻松去除水印&#xff0c;享受无干扰的视频体验。 工具一&#xff1a;奈斯水印助手(小程序…

初识MATLAB相关学习笔记

MATLAB的主要功能、应用场景及其相对于其他编程语言的优势和劣势 主要功能 1. 数值计算&#xff1a; 矩阵运算和线性代数。 解微分方程组。 优化算法。 数据插值和拟合。 2. 数据可视化&#xff1a; 2D和3D图形绘制。 图像处理和分析。 动画和GUI构建。 3. 算法开发&#x…

【Linux 从基础到进阶】GlusterFS分布式文件系统搭建

GlusterFS分布式文件系统搭建 引言 随着数据存储需求的快速增长,企业和开发者越来越需要一种高效、可扩展的存储解决方案。GlusterFS是一款开源的分布式文件系统,能够将多个存储服务器组合成一个统一的文件系统,提供高可用性、弹性扩展和性能优化等特性。它可以在标准的以…

数码管进阶设计验证

前言 随着数字电路和嵌入式系统的广泛应用&#xff0c;数码管作为一种常见的显示设备&#xff0c;在各种电子产品中扮演着重要角色。数码管以其结构简单、显示清晰和成本低廉的特点&#xff0c;广泛应用于计数器、时钟、测量仪器等领域。然而&#xff0c;传统的数码管设计通常仅…

DBeaver安装使用

文章目录 简介支持的数据库支持的系统 下载安装DBeaver使用修改Maven下载jar地址窗口->首选项连接->驱动->Maven配置仓库地址 选择需要连接的数据库进行连接 简介 DBeaver 是一个通用的数据库管理工具和 SQL 客户端&#xff0c;支持 MySQL, PostgreSQL, Oracle, DB2,…

运维学习————nginx2-配置详解及负载均衡

目录 一、配置文件详解 1.1、结构 1.2、重要配置解释 1.3、详细配置 全局配置 Events HTTP 服务器配置 server虚拟主机配置 location URL匹配配置 1.4、完整配置 二、负载均衡 2.1、概念 2.2、集群规划及实现 2.3、具体实现 2.3.1、克隆 2.3.2、修改tomcat1配…

Python | Leetcode Python题解之第372题超级次方

题目&#xff1a; 题解&#xff1a; class Solution:def superPow(self, a: int, b: List[int]) -> int:MOD 1337ans 1for e in b:ans pow(ans, 10, MOD) * pow(a, e, MOD) % MODreturn ans

C#高效异步文件监控与日志记录工具

优势 异步处理&#xff1a;提高了文件变化处理的效率&#xff0c;避免了阻塞主线程。线程安全&#xff1a;使用了线程安全的队列来避免多线程环境下的竞态条件。日志记录&#xff1a;异步日志记录减少了对主线程的干扰&#xff0c;并且能够处理大量事件。灵活配置&#xff1a;…

【MySQL、Hive】分区表

SQL 本身并不直接支持多线程处理&#xff0c;因为 SQL 是一种声明式语言&#xff0c;主要用于定义和操作数据库中的数据。多线程通常是在应用程序层面实现的。然而&#xff0c;有一些方法可以在 SQL 环境中优化并发处理和提高性能&#xff0c;这些方法在某种程度上可以被视为&q…

How to stream video in a loop via RTP using ffmpeg?

ffmpeg -re -fflags genpts -stream_loop -1 -i conf2-2.mp4 -vcodec copy -an -f rtp rtp://192.168.31.152:2000 vlc 应该可以播放出来的。 这里有一篇文章&#xff0c;有兴趣的可以试试&#xff1a; https://www.wowza.com/docs/how-to-configure-vlc-media-player-for…

MySQL 学习笔记之事务操作

文章目录 MySQL 事务操作事务概述1. 事务操作的基本用法1.1 创建表和插入数据1.2 设置手动提交1.3 正常的转账操作1.4 异常情况处理1.5 使用 START TRANSACTION 2. 事务隔离级别2.1 查看当前事务隔离级别2.2 设置事务隔离级别 完整代码 MySQL 事务操作 事务概述 事务是数据库管…

go+gin+vue入门

后端框架 1、安装go、goland 2、创建空项目 3、下载要用的包&#xff1a;命令行输入go get -u github.com/xxxx 4、安装mysql数据库&#xff0c;使用navicat创建数据库。 5、按照项目框架搭建目录、文件、代码&#xff1a;如router、model… 6、运行测试&#xff0c;go run ma…