概述
- 要实现一个控件的鼠标事件,可以直接新建一个类继承自该控件,然后重写鼠标的各种触发事件,最后再将控件提升为该类即可
实现
- 可重写的几个鼠标事件
案例
代码
#include "mylabel.h"
#include "QDebug"
#include "QMouseEvent"
MyLabel::MyLabel(QWidget *parent)
: QLabel{parent}
{
//设置鼠标追踪
//如果不设置鼠标追踪 那鼠标移动的事件只有当鼠标按键按下后移动时才会触发
//设置了鼠标追踪后 鼠标移动的事件会在鼠标进入到控件后移动时触发
setMouseTracking(true);
}
//鼠标进入事件
void MyLabel::enterEvent(QEnterEvent *event)
{
qDebug() << "鼠标进入了";
}
//鼠标离开事件
void MyLabel::leaveEvent(QEvent *event)
{
qDebug() << "鼠标离开了";
}
//鼠标移动
void MyLabel::mouseMoveEvent(QMouseEvent *ev)
{
//左键按下执行
if(ev->buttons() & Qt::LeftButton)
{
qDebug() << "鼠标移动";
}
}
//鼠标按下
void MyLabel::mousePressEvent(QMouseEvent *ev)
{
//左键按下执行
if(ev->button()==Qt::LeftButton)
{
QString str = QString("鼠标按下 x=%1 y=%2 gx=%3 gy=%4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
qDebug() << str;
}
}
//鼠标释放
void MyLabel::mouseReleaseEvent(QMouseEvent *ev)
{
qDebug() << "鼠标释放";
}