当前位置:首页 >> 开发者生态 >> 【QT】鼠标常用事件,n880g

【QT】鼠标常用事件,n880g

cpugpu芯片开发光刻机 开发者生态 2
文件名:【QT】鼠标常用事件,n880g 【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;}}

效果

协助本站SEO优化一下,谢谢!
关键词不能为空
同类推荐
«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接