Qt开发基础(9)——鼠标事件

只要鼠标进入就再Qlabel中显示鼠标进入了。

我们可以自定义类为mylabel,父类为QWidget当鼠标进入的时候再Qlabel中显示鼠标进行了。

 再mylabel文件编写如下:

mylabel头文件:

#ifndef MYLABEL_H
#define MYLABEL_H

#include <QLabel>

class mylabel : public QLabel
{
    Q_OBJECT
public:
    explicit mylabel(QWidget *parent = nullptr);
    //鼠标进入事件
    void enterEvent(QEvent *event);

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


signals:

};

#endif // MYLABEL_H

mylabel源文件:

#include "mylabel.h"
#include<QDebug>

mylabel::mylabel(QWidget *parent) : QLabel(parent)
{

}

//鼠标进入
void mylabel::enterEvent(QEvent *event)
{
    qDebug()<<"鼠标进入了";
}

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

 但是我们自己封装好的mylabel类与主窗口没有关系,所以我们需要提升为与主窗口的Label具有同样的类,所以再myLabel文件中继承的QWidget要改为QLabel

如下:

mylabel头文件:

#ifndef MYLABEL_H
#define MYLABEL_H

#include <QLabel>

class mylabel : public QLabel
{
    Q_OBJECT
public:
    explicit mylabel(QWidget *parent = nullptr);
    //鼠标进入事件
    void enterEvent(QEvent *event);

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


signals:

};

#endif // MYLABEL_H

mylabel源文件

#include "mylabel.h"
#include<QDebug>

mylabel::mylabel(QWidget *parent) : QLabel(parent)
{

}

//鼠标进入
void mylabel::enterEvent(QEvent *event)
{
    qDebug()<<"鼠标进入了";
}

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

改完类统一以后把主窗口的Qlabel提升为:

 类名称改为mylabel。然后添加提升即可。

 



其他鼠标事件:

mylabel.h

#ifndef MYLABEL_H
#define MYLABEL_H

#include <QLabel>

class mylabel : public QLabel
{
    Q_OBJECT
public:
    explicit mylabel(QWidget *parent = nullptr);
    //鼠标进入事件
    void enterEvent(QEvent *event);

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

    //鼠标的按下
    void mousePressEvent(QMouseEvent *ev);

    //鼠标释放
    void mouseReleaseEvent(QMouseEvent *ev);

    //鼠标移动
    void mouseMoveEvent(QMouseEvent *ev);


signals:

};

#endif // MYLABEL_H

 mylabel.cpp

#include "mylabel.h"
#include<QDebug>

mylabel::mylabel(QWidget *parent) : QLabel(parent)
{

}

//鼠标进入
void mylabel::enterEvent(QEvent *event)
{
//    qDebug()<<QStringLiteral("鼠标进入了");
}

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

void mylabel::mousePressEvent(QMouseEvent *ev)
{
    qDebug()<<QStringLiteral("鼠标按下了");

}

//鼠标释放
void mylabel::mouseReleaseEvent(QMouseEvent *ev)
{
    qDebug()<<QStringLiteral("鼠标释放了");
}

//鼠标移动
void mylabel::mouseMoveEvent(QMouseEvent *ev)
{
    qDebug()<<QStringLiteral("鼠标移动了");

}

 



如果我们要在点击的位置获取鼠标的点击位置的坐标并打印出来该如何做呢?

首先需要导入包:

#include<QMouseEvent>



假如我们需要按下鼠标左键才进行获取坐标呢?

 需要加一个判断语句。



如果我们不是在点击才知道鼠标的位置,而是鼠标在哪儿都知道,我们可以设置鼠标追踪:

mylabel.cpp如下:

#include "mylabel.h"
#include<QDebug>
#include<QMouseEvent>

mylabel::mylabel(QWidget *parent) : QLabel(parent)
{
    //设置鼠标追踪状态:
    setMouseTracking(true);

}

//鼠标进入
void mylabel::enterEvent(QEvent *event)
{
//    qDebug()<<QStringLiteral("鼠标进入了");
}

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

void mylabel::mousePressEvent(QMouseEvent *ev)
{
//    qDebug()<<QStringLiteral("鼠标按下了");
//    if(ev->button()==Qt::LeftButton)
//    {
        QString str = QString(QStringLiteral("鼠标按下了 x=%1 y=%2")).arg(ev->x()).arg(ev->y());
        qDebug()<<str;
//    }

}

//鼠标释放
void mylabel::mouseReleaseEvent(QMouseEvent *ev)
{
    qDebug()<<QStringLiteral("鼠标释放了");
}

//鼠标移动
void mylabel::mouseMoveEvent(QMouseEvent *ev)
{
//    qDebug()<<QStringLiteral("鼠标移动了");
    QString str = QString(QStringLiteral("鼠标移动了 x=%1 y=%2")).arg(ev->x()).arg(ev->y());
    qDebug()<<str;

}

增加了如下:

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI炮灰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值