目标:使label控件支持鼠标的进入和离开事件的捕捉
在工程中添加c++类文件 MyLabel
#ifndef MYLABEL_H
#define MYLABEL_H
#include "QLabel"
class MyLabel : public QLabel
{
Q_OBJECT
public:
explicit MyLabel(QWidget *parent = nullptr);
void enterEvent(QEvent *ev); //重载的鼠标进入事件
void leaveEvent(QEvent *event); //重载的鼠标离开事件
};
#endif // MYLABEL_H
#include "mylabel.h"
#include"qdebug.h"
MyLabel::MyLabel(QWidget *parent) : QLabel(parent)
{
}
void MyLabel::enterEvent(QEvent *ev)
{
qDebug()<<"鼠标进入";
}
void MyLabel::leaveEvent(QEvent *event)
{
qDebug()<<"鼠标离开";
}
在UI中添加一个label ,选中label右键->提升 ->输入类名MyLabel .
这就完成了对label控件的鼠标事件的重写.
判断鼠标左键事件
//类中申明
void mousePressEvent(QMouseEvent *ev);
//类外实现
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::mouseMoveEvent(QMouseEvent *ev)
{
//buttons包含了鼠标的左键 右键 和滚轮是否按下,如果按下了 会有有相应的位记下来
if(ev->buttons()&Qt::LeftButton)
{
qDebug()<<"鼠标移动 且按下了左键";
}
}
设置鼠标追踪
mouseMoveEvent事件默认是需要按下鼠标按下才会被触发.
如果想实现鼠标在空间上移动就能触发mouseMoveEvent 需要setMouseTracking来实现鼠标追踪.
MyLabel::MyLabel(QWidget *parent) : QLabel(parent)
{
setMouseTracking(true);
}