只要鼠标进入就再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;
}
增加了如下: