qt鼠标常用事件

和上一个案例相同,也是做了提升,换了相同父类,但是方式有所不同

先在widget.ui中加入label标签,此时其父类为QLabel,然后想实现鼠标在QLabel上的捕获。所以我们需要把QLabel提升为自己的框架,然后自定义框架后,我们就可以自己捕获信息了。然后添加新文件mylabel.h和mylabel.cpp,base class选择继承为QWidget,因为选项没有QlABEL,一会在文件中将函数修改即可。

cpp 复制代码
#ifndef MYLABLE_H
#define MYLABLE_H

#include <QLabel>

class MyLable : public QLabel
{
    Q_OBJECT
public:
    explicit MyLable(QWidget *parent = nullptr);

    //鼠标进入  声明
    void enterEvent(QEvent *);

    //鼠标离开
    void leaveEvent(QEvent *);

    //鼠标按下事件
    void mousePressEvent(QMouseEvent *ev);
    //鼠标离开事件
    void mouseReleaseEvent(QMouseEvent *ev) ;
    //鼠标移动事件
    void mouseMoveEvent(QMouseEvent *ev) ;
signals:

};

#endif // MYLABLE_H
cpp 复制代码
#include "mylable.h"
#include "QDebug"
#include "QMouseEvent"
MyLable::MyLable(QWidget *parent) : QLabel(parent)
{
    //设置鼠标追踪
    this->setMouseTracking(true);//默认为false这里设置为true
}


//两个父类一样才能提升

//此时提升了widget.ui父类为mylable    此时就可以把widget.ui当为mylable进行代码添加使用
//鼠标进入
void MyLable::enterEvent(QEvent *)//加上作用域
{
//    qDebug()<<"鼠标进入了";
}

//鼠标离开
void MyLable::leaveEvent(QEvent *)
{
//    qDebug()<<"鼠标离开了";
}


//鼠标按下事件
void MyLable::mousePressEvent(QMouseEvent *ev)
{
    //如果是鼠标左键按下,才打印下面的信息
    if(ev->button()==Qt::LeftButton)
    {
        QString str=QString("鼠标按下了,x=%1,y=%2").arg(ev->x()).arg(ev->y());//QString函数
        qDebug()<<str;
    }

}
//鼠标离开事件
void MyLable::mouseReleaseEvent(QMouseEvent *ev)
{
    if(ev->button()==Qt::LeftButton){
        QString str=QString("鼠标释放了,x=%1,y=%2").arg(ev->x()).arg(ev->y());
        qDebug()<<str;//
    }

}
//鼠标移动事件
void MyLable::mouseMoveEvent(QMouseEvent *ev)
{
    //移动不是一瞬间的,是一段时间的
//    if(ev->buttons() & Qt::LeftButton)//用了复合按键和未与按键
//    {
        QString str=QString("鼠标移动了,x=%1,y=%2").arg(ev->x()).arg(ev->y());//QString函数
        qDebug()<<str;//要长按
//    }

}//坐标系是基于坐标系的

实现了鼠标进入label框后就会qDebug出在移动,包括点击和离开都会有响应。

代码精讲

复制代码
//鼠标按下事件
void MyLable::mousePressEvent(QMouseEvent *ev)
{    
//如果是鼠标左键按下,才打印下面的信息   
 if(ev->button()==Qt::LeftButton)    
{        QString str=QString("鼠标按下了,x=%1,y=%2").arg(ev->x()).arg(ev->y());//QString函数
复制代码
        qDebug()<<str;    }}

两个红色代码 第一个是按下左键才会实现效果 第二个是会显示在QLable的坐标,它是以左上角为(0,0)基础坐标,经过实现,可以一直出去,坐标可以为负

复制代码
//在构造函数中的设置
MyLable::MyLable(QWidget *parent) : QLabel(parent)
复制代码
{    //设置鼠标追踪  
  this->setMouseTracking(true);//默认为false这里设置为true}

默认为false这里设置为true

效果图如下

相关推荐
风吹心凉4 小时前
python3基础2026.7.22
开发语言·python
qq_452396234 小时前
第五篇:《接口与错误处理:Go 的哲学》
开发语言·后端·golang
Escalating_xu4 小时前
C++可变参数模板与引用折叠精讲
开发语言·c++
wuyk5554 小时前
59.嵌入式C语言高级宏定义实战:多行宏、字符串化与符号拼接
c语言·开发语言·stm32·单片机·嵌入式硬件·物联网·51单片机
云泽8084 小时前
Visual Studio 2026 新手保姆级教程:环境搭建、界面优化与编译器配置详解
开发语言·c++·c·开发工具·visual studio
2zcode5 小时前
基于MATLAB深度学习的乳腺钼靶影像乳腺癌智能诊断系统设计与实现
开发语言·深度学习·matlab·乳腺癌
MoonBit月兔5 小时前
错过大赛报名?MoonBit 开源大赛- 8 月黑客松正式开启
开发语言·ai-native·moonbit
weixin_538601975 小时前
智能体测开Day31
开发语言·python
geovindu6 小时前
java: Facade Pattern
java·开发语言·后端·外观模式·结构型模式
listening7776 小时前
HarmonyOS 6.1 元服务深度优化:从“秒开”到“常驻”的极致体验
java·开发语言·spring