Qt中的鼠标事件

目标:使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);
}

猜你喜欢

转载自blog.csdn.net/qq_41490873/article/details/108485702