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

news2024/11/15 17:24:12

文章目录

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

在 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.coloradmin.cn/o/2068328.html

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

相关文章

系统编程—进程

一、进程的概念 1.程序与进程的区别 程序:编译后产生的&#xff0c;格式为ELF的&#xff0c;存储于硬盘的文件。可以通过 readelf -s [文件名] 查看文件信息 …

使用OpenRewrite升级SpringBoot项目

使用OpenRewrite升级SpringBoot项目 什么是OpenRewrite? OpenRewrite是一个强大的开源自动化源代码重构工具,专为大规模代码库设计。它的核心理念是通过程序化的方式来改变源代码,而不是依赖于手动编辑或简单的查找替换。 OpenRewrite的主要特点和优势包括: 自动重构: Open…

Unity动画模块 之 Animator中一些常见参数

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正 我发现我忘了写Animator了&#xff0c;正好有些不常用的参数还没怎么认识,笔记来源于唐老狮 1.状态窗口参数 2.连线参数…

Lesson05--C/C++内存管理

1. C/C内存分布 2. C语言中动态内存管理方式 3. C中动态内存管理 4. operator new与operator delete函数 5. new和delete的实现原理 6. 定位new表达式(placement-new) 7. 常见面试题 1. C/C内存分布 为了方便管理内存被分为了以上的区域 我们来看下面的一段代码和相关问题 …

数据结构(邓俊辉)学习笔记】优先级队列 08——左式堆:结构

文章目录 1. 第一印象2. 堆之合并3. 奇中求正4. NPL5. 左倾性6. 左展右敛 1. 第一印象 在学习过常规的完全二叉堆之后&#xff0c;我们再来学习优先级队列的另一变种&#xff0c;也就是左式堆。所谓的左式堆&#xff0c;也就是在拓扑形态上更加倾向于向左侧倾斜的一种堆&#…

Vue3 项目结构

1.main.ts 2.简单写一个src下的结构 App.vue 根组件 <template><div class"app"><!-- html --><h1>你好啊!</h1></div> </template><script lang"ts"> //js 或 tsexport default {name:App,//组件名 }…

MySQL数据库锁机制(全面讲解)

目录 1、全局锁 1.1、全局锁使用语法 1.2、备份数据库&#xff08;不使用全局锁&#xff09; 2、表锁 2.1、读写锁 读锁 写锁 2.2、元数据锁&#xff08;meta data lock MDL&#xff09; 2.3、意向锁 3、行锁 3.1、共享锁和排他锁 共享锁&#xff08;S锁&#xff…

原来marker还能这么玩

在Web GIS开发中&#xff0c;Marker&#xff08;标记&#xff09;是一个基本但强大的工具。今天&#xff0c;我们将探讨如何通过不同的API调用&#xff0c;将Marker玩出新花样&#xff0c;让地图更加生动有趣。 最基础的Marker用法是在地图上标记一个具体位置。我们可以通过“m…

【Unity3D小技巧】Unity3D中实现对InputField的自定义输入限制实例

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群&#xff1a;398291828 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 InputField是UGUI的文本输入框&#xff0c;自带的…

粘包,Telnet,SSH,Wireshark

一&#xff0c;粘包 原因&#xff1a;tcp为流式套接字&#xff0c;数据与数据间没有边界&#xff0c;导致多次数据粘到一起。 解决&#xff1a; 1.规定一些数据间的间隔符&#xff0c;"\aa","\r\n"; 2.可以指定要发送对象的数据长度。 3.自己将数据打包。 …

力扣:有效的数独

文章目录 需求分析结尾 需求 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08…

2024年最新最全的【大模型学习路线规划】从零基础入门到精通!

2024年最新最全的大模型学习路线规划&#xff0c;对于零基础入门到精通的学习者来说&#xff0c;可以遵循以下阶段进行&#xff1a; 文章目录 一、基础准备阶段数学基础&#xff1a;编程语言&#xff1a;深度学习基础&#xff1a; 二、核心技术学习阶段Transformer模型&#xf…

第2章-04-Request Header与Response Header

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年CSDN全站百大博主。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于专栏:Web爬虫入门与实战精讲,后续完整更新内容如下。 文章…

TortoiseGit使用教程

系列文章目录 文章目录 系列文章目录前言一、TortoiseGit下载安装二、使用步骤1.创建库1.需要上传的文件&#xff1a;不需要上传的文件&#xff1a; 2.拉取代码 前言 以前都是用svn&#xff0c;现在改用git Git是目前世界上最先进的分布式版本控制系统&#xff08;没有之一&am…

IO进程day01(标准IO、缓存区)

目录 【1】标准IO 1》概念&#xff1a; 2》特点 【2】缓存区 1》全缓存&#xff1a;和文件相关 2》行缓存&#xff1a;和终端有关 3》不缓存&#xff1a;也就是没有缓存区&#xff0c;标准错误。 【1】标准IO 1》概念&#xff1a; 标准IO&#xff1a; 是在C库中定义的一…

Linux入门——10 信号

1.信号 1.信号------信号量&#xff08;两者没有任何关系&#xff09; 2.信号讲什么----->整个信号的生命周期 信号的产生-----信号的保存------信号的处理 之前的kill命令&#xff0c;用的就是信号。 kill -l查看系统支持的信号 名字本身就是宏&#xff0c;其实就是编…

java—1 封装

目录 一、零碎内容 一、输入、输出 二、idea项目结构 三、Java标识符的命名规范&#xff08;约定俗成&#xff09; 四. 方法和函数 二、快捷键 三、数组 1. 声明数组 2. 静态初始化 3. 数组动态初始化 4. 声明和初始化一起完成 5. 数组地址 四、面向对象编程 1. …

进程函数练习

创建子父进程&#xff0c;子进程将1.txt内容拷贝到2.txt中&#xff0c;父进程将3.txt内容拷贝到4.txt中。 #include <myhead.h>int main(int argc, const char *argv[]) {pid_t ID;ID fork();if(ID>0)//父进程{printf("父进程ID:%d\n",ID);int fd open(&…

C HTML格式解析与生成

cmake报错替换 if(NOT MyHTML_BUILD_WITHOUT_THREADS OR NOT MyCORE_BUILD_WITHOUT_THREADS) set(CMAKE_THREAD_PREFER_PTHREAD 1) if (WIN32) set(CMAKE_USE_WIN32_THREADS_INIT ON) set(CMAKE_THREAD_PREFER_PTHREADS TRUE) set(THREADS_PR…

Covalent Network(CXT)第二季度委托激励增长83%

Covalent Network&#xff08;CXT&#xff09;是一家领先的区块链数据解决方案供应商&#xff0c;拥有超过 230 条链的集成和数十亿个结构化数据点&#xff0c;专注于去中心化应用&#xff08;dApps&#xff09;和长期数据可用性。Covalent Network&#xff08;CXT&#xff09;…