当前位置: 首页 > news >正文

【QT】鼠标常用事件

新建项目

加标签控件

当鼠标进去,显示【鼠标进入】,离开时显示【鼠标离开】

将QLable提升成自己的控件,然后再去捕获

添加文件

改继承的类名

提升类

同一个父类,可以提升

效果

现在代码就和Qlabel对应起来了。

在.h中声明,.cpp中实现

#include "mylabel.h"
#include <QDebug>MyLabel::MyLabel(QWidget *parent) : QLabel(parent)
{}// 鼠标进入
void MyLabel::enterEvent(QEvent* ) {qDebug() << "鼠标进入";
}// 鼠标离开
void MyLabel::leaveEvent(QEvent* ) {qDebug() << "鼠标离开";
}

测试

鼠标的移动、按下、松开事件

    // 鼠标移动事件virtual void mouseMoveEvent(QMouseEvent *ev) override;// 鼠标按下事件virtual void mousePressEvent(QMouseEvent *ev) override;// 鼠标松开事件virtual void mouseReleaseEvent(QMouseEvent *ev) override;

实现

#include "mylabel.h"
#include <QDebug>MyLabel::MyLabel(QWidget *parent) : QLabel(parent)
{}// 鼠标进入
void MyLabel::enterEvent(QEvent* ) {qDebug() << "鼠标进入";
}// 鼠标离开
void MyLabel::leaveEvent(QEvent* ) {qDebug() << "鼠标离开";
}// 鼠标移动事件
void MyLabel::mouseMoveEvent(QMouseEvent *ev) {qDebug() << "鼠标移动";
}
// 鼠标按下事件
void MyLabel::mousePressEvent(QMouseEvent *ev) {qDebug() << "鼠标按下";
}
// 鼠标松开事件
void MyLabel::mouseReleaseEvent(QMouseEvent *ev) {qDebug() << "鼠标松开";
}

测试

坐标信息(基于控件的坐标系

#include "mylabel.h"
#include <QDebug>
#include <QMouseEvent>MyLabel::MyLabel(QWidget *parent) : QLabel(parent)
{}// 鼠标进入
void MyLabel::enterEvent(QEvent* ) {qDebug() << "鼠标进入";
}// 鼠标离开
void MyLabel::leaveEvent(QEvent* ) {qDebug() << "鼠标离开";
}// 鼠标移动事件
void MyLabel::mouseMoveEvent(QMouseEvent *ev) {qDebug() << "鼠标移动" ;
}
// 鼠标按下事件
void MyLabel::mousePressEvent(QMouseEvent *ev) {// 格式化字符串方式QString str = QString("鼠标按下, x = %1, y = %2").arg(ev->x()).arg(ev->y());qDebug() << str;
}
// 鼠标松开事件
void MyLabel::mouseReleaseEvent(QMouseEvent *ev) {qDebug() << "鼠标松开";
}

效果

其他的类似

判断鼠标左右键

// 鼠标按下事件
void MyLabel::mousePressEvent(QMouseEvent *ev) {// 格式化字符串方式// 左键才打印下面的信息if (ev->button() == Qt::LeftButton) {QString str = QString("鼠标按下, x = %1, y = %2").arg(ev->x()).arg(ev->y());qDebug() << str;} else {qDebug() << "右键按下";}}

效果

全部改成按左键有输出

// 鼠标移动事件
void MyLabel::mouseMoveEvent(QMouseEvent *ev) {// 格式化字符串方式if (ev->button() == Qt::LeftButton) {QString str = QString("鼠标移动, x = %1, y = %2").arg(ev->x()).arg(ev->y());qDebug() << str;}
}
// 鼠标按下事件
void MyLabel::mousePressEvent(QMouseEvent *ev) {// 格式化字符串方式// 左键才打印下面的信息if (ev->button() == Qt::LeftButton) {QString str = QString("鼠标按下, x = %1, y = %2").arg(ev->x()).arg(ev->y());qDebug() << str;}}
// 鼠标松开事件
void MyLabel::mouseReleaseEvent(QMouseEvent *ev) {// 格式化字符串方式if (ev->button() == Qt::LeftButton) {QString str = QString("鼠标松开, x = %1, y = %2").arg(ev->x()).arg(ev->y());qDebug() << str;}
}

效果

移动是没有输出的。按下和松开是一瞬间的,而移动不是一瞬间的,是联合的。使用buttons和&

// 鼠标移动事件
void MyLabel::mouseMoveEvent(QMouseEvent *ev) {// 格式化字符串方式if (ev->buttons() & Qt::LeftButton) {QString str = QString("鼠标移动, x = %1, y = %2").arg(ev->x()).arg(ev->y());qDebug() << str;}
}

效果

鼠标不点下去,移动。设置鼠标追踪的状态,默认为false,在构造函数中设置

#include "mylabel.h"
#include <QDebug>
#include <QMouseEvent>MyLabel::MyLabel(QWidget *parent) : QLabel(parent)
{// 设置鼠标追踪状态,默认是falsethis->setMouseTracking(true);
}// 鼠标进入
void MyLabel::enterEvent(QEvent* ) {qDebug() << "鼠标进入";
}// 鼠标离开
void MyLabel::leaveEvent(QEvent* ) {qDebug() << "鼠标离开";
}// 鼠标移动事件
void MyLabel::mouseMoveEvent(QMouseEvent *ev) {// 格式化字符串方式
//    if (ev->buttons() & Qt::LeftButton) {
//        QString str = QString("鼠标移动, x = %1, y = %2").arg(ev->x()).arg(ev->y());
//        qDebug() << str;
//    }QString str = QString("鼠标移动, x = %1, y = %2").arg(ev->x()).arg(ev->y());qDebug() << str;}
// 鼠标按下事件
void MyLabel::mousePressEvent(QMouseEvent *ev) {// 格式化字符串方式// 左键才打印下面的信息if (ev->button() == Qt::LeftButton) {QString str = QString("鼠标按下, x = %1, y = %2").arg(ev->x()).arg(ev->y());qDebug() << str;}}
// 鼠标松开事件
void MyLabel::mouseReleaseEvent(QMouseEvent *ev) {// 格式化字符串方式if (ev->button() == Qt::LeftButton) {QString str = QString("鼠标松开, x = %1, y = %2").arg(ev->x()).arg(ev->y());qDebug() << str;}
}

效果

相关文章:

  • C++标准模板(STL)- 类型支持 (类型属性,is_volatile,is_trivial,is_const)
  • 【跟小嘉学 Rust 编程】三十四、Rust的Web开发框架之一: Actix-Web的进阶
  • C#反射的学习,反射的一些注意事项,反射的一些使用代码的实例
  • VSCode 如何设置背景图片
  • Linux启动故障排错
  • 使用脚本整合指定文件/文件夹,执行定制化 ESLint 命令
  • LiveMeida视频接入网关
  • [JavaWeb]——获取请求参数的方式(全面!!!)
  • 基于tpshop开发多商户源码支持手机端+商家+门店 +分销+淘宝数据导入+APP+可视化编辑
  • Centos7下生成https自签名证书
  • 【Linux】安装使用Nginx负载均衡,并且部署前端项目
  • 常用编程语言排行与应用场景汇总(2023.10)
  • NOIP2023模拟8联测29 C. 蛋糕
  • 【Django】项目模型
  • 第四章 应用SysML基本特性集的汽车示例 P2(断更)|系统建模语言SysML实用指南学习
  • [PHP内核探索]PHP中的哈希表
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • JS学习笔记——闭包
  • Linux下的乱码问题
  • nginx 负载服务器优化
  • Python_OOP
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • 编写符合Python风格的对象
  • 测试开发系类之接口自动化测试
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 大型网站性能监测、分析与优化常见问题QA
  • 记一次用 NodeJs 实现模拟登录的思路
  • 将回调地狱按在地上摩擦的Promise
  • 排序(1):冒泡排序
  • 前端代码风格自动化系列(二)之Commitlint
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 思考 CSS 架构
  • 我的zsh配置, 2019最新方案
  • 以太坊客户端Geth命令参数详解
  • 正则学习笔记
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​业务双活的数据切换思路设计(下)
  • ![CDATA[ ]] 是什么东东
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (LeetCode C++)盛最多水的容器
  • (第27天)Oracle 数据泵转换分区表
  • (顺序)容器的好伴侣 --- 容器适配器
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)甲方乙方——赵民谈找工作
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .net 无限分类
  • .net中的Queue和Stack
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • ::什么意思
  • [Android Studio 权威教程]断点调试和高级调试
  • [Android]Tool-Systrace