news 2026/6/10 8:39:32

MouseEvent

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MouseEvent

鼠标事件

在Qt中,鼠标事件主要包括以下几种:

  • 鼠标按下事件,当用户按下鼠标按键时触发
  • 鼠标释放事件,当用户松开鼠标按键时触发
  • 鼠标单击事件,按下和释放鼠标按键时触发
  • 鼠标双击事件,用户在短时间内连续单击两次鼠标按键时触发
  • 鼠标移动事件,当鼠标指针在窗口或控件内部移动时触发
  • 鼠标滚轮事件,用户滚动鼠标滚轮时触发
  • 鼠标悬停事件,当鼠标停留在控件上方一段时间触发

这些函数名都是内置的,重写就不用写槽函数和发送信号

代码如下

这里有两个窗口,小控件的被大的挡住了

myLabel.h

#ifndefMYLABEL_H#defineMYLABEL_H#include<QWidget>#include<QLabel>classmyLabel:publicQLabel{public:// 显式构造函数explicitmyLabel(QWidget*parent=0);// 定义鼠标按下事件触发函数voidmousePressEvent(QMouseEvent*ev);// 定义鼠标移动事件触发函数voidmouseMoveEvent(QMouseEvent*ev);// 定义鼠标释放事件触发函数voidmouseReleaseEvent(QMouseEvent*ev);// 双击事件,双击时候会触发单击voidmouseDoubleClickEvent(QMouseEvent*ev);// 滚轮事件voidwheelEvent(QWheelEvent*ev);// 鼠标进入控件区域voidenterEvent(QEnterEvent*ev);// 鼠标离开控件区域voidleaveEvent(QEvent*ev);private:QWidget*QLabel;};#endif// MYLABEL_H

myLabel.cpp

#include"mylabel.h"#include<QMouseEvent>#include<QWidget>myLabel::myLabel(QWidget*parent):QLabel(parent){}voidmyLabel::mousePressEvent(QMouseEvent*ev){// 判断鼠标按下的是左键还是右键if(ev->button()==Qt::LeftButton){QString str=QString::fromLocal8Bit("鼠标左键按下:(%1,%2)").arg(QString::number(ev->x()),QString::number(ev->y()));this->setText(str);}else{QString str=QString::fromLocal8Bit("鼠标右键按下:(%1,%2)").arg(QString::number(ev->x()),QString::number(ev->y()));this->setText(str);}}voidmyLabel::mouseMoveEvent(QMouseEvent*ev){// 开启这个实施捕捉setMouseTracking(true);QString str=QString::fromLocal8Bit("鼠标移动:(%1,%2)").arg(QString::number(ev->x()),QString::number(ev->y()));this->setText(str);}voidmyLabel::mouseReleaseEvent(QMouseEvent*ev){this->setText(QString::fromLocal8Bit("鼠标松开"));}voidmyLabel::mouseDoubleClickEvent(QMouseEvent*ev){QString str=QString::fromLocal8Bit("触发双击:(%1, %2)").arg(QString::number(ev->x()),QString::number(ev->y()));this->setText(str);// 改变一下样式,看是否成功this->setStyleSheet("background-color: #ffcccc; font-size: 20px; border: 2px solid blue;");}voidmyLabel::wheelEvent(QWheelEvent*ev){// angleDalta().y() > 0 表示向前滚(远离客户)intdelta=ev->angleDelta().y();QString direction=delta>0?QString::fromLocal8Bit("向前滚(“放大”)"):QString::fromLocal8Bit("向后滚(“缩小”)");QString str=QString::fromLocal8Bit("滚轮滑动:数值 %1 -> %2").arg(delta).arg(direction);this->setText(str);}voidmyLabel::enterEvent(QEnterEvent*ev){this->setStyleSheet("background-color: lightblue; font-size: 20px; border: 2px solid blue");this->setText(QString::fromLocal8Bit("鼠标已进入区域"));}voidmyLabel::leaveEvent(QEvent*ev){this->setStyleSheet("background-color: lightgray; font-size: 20px; border: 2px solid black");this->setText(QString::fromLocal8Bit("鼠标已离开"));}

widget.cpp

#include"widget.h"#include"ui_widget.h"#include"mylabel.h"Widget::Widget(QWidget*parent):QWidget(parent),ui(newUi::Widget){ui->setupUi(this);this->setWindowTitle(QString::fromLocal8Bit("鼠标事件"));myLabel*label=newmyLabel(this);label->setText(QString::fromLocal8Bit("初始状态"));label->setFixedSize(400,400);label->setAlignment(Qt::AlignCenter);label->setStyleSheet("QLabel{border:1px solid red;}");label->show();}Widget::~Widget(){deleteui;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/6 11:01:02

Open-AutoGLM爆火背后的秘密(AutoGLM与OpenAI实战性能对比)

第一章&#xff1a;Open-AutoGLM爆火现象解析近期&#xff0c;开源项目 Open-AutoGLM 在 GitHub 上迅速走红&#xff0c;引发开发者社区广泛关注。该项目由国内技术团队推出&#xff0c;旨在构建一个可自主迭代、具备自动代码生成与优化能力的通用语言模型框架。其核心亮点在于…

作者头像 李华
网站建设 2026/6/4 20:01:05

70款H5游戏整合小游戏平台网站源码

70款H5游戏整合小游戏平台网站源码&#xff0c;测试有几个缺失素材&#xff0c;绝大部分都可以玩的&#xff0c;类型多&#xff0c;小游戏平台网站源码&#xff0c;70个H5游戏整合。 包含消消乐、捕鱼、象棋等。 源码下载&#xff1a; https://download.csdn.net/download/m0…

作者头像 李华
网站建设 2026/6/6 18:48:47

【阿里云部署Open-AutoGLM避坑手册】:90%新手都会忽略的4个致命问题

第一章&#xff1a;Open-AutoGLM 阿里云部署概述Open-AutoGLM 是基于 AutoGLM 架构的开源自动化语言模型系统&#xff0c;支持在云端快速部署与扩展。阿里云作为国内领先的云计算平台&#xff0c;提供了从计算资源到网络安全的完整生态体系&#xff0c;为 Open-AutoGLM 的高效运…

作者头像 李华
网站建设 2026/5/14 3:04:15

使用TensorFlow镜像进行自动化测试:确保模型稳定性

使用TensorFlow镜像进行自动化测试&#xff1a;确保模型稳定性 在现代AI工程实践中&#xff0c;一个看似简单的问题却常常让团队陷入困境——为什么同一个模型&#xff0c;在开发者的机器上表现完美&#xff0c;部署到生产环境后却频频出错&#xff1f;这种“在我机器上能跑”的…

作者头像 李华