QT学习之鼠标事件

1、首先新建一个带UI的项目,在UI界面中拖入一个label标签控件
2、添加一个新的类,命名为mylabel

在mylabel.h中添加代码

#ifndef MYLABEL_H
#define MYLABEL_H

#include <QWidget>
#include <QDebug>
#include <QLabel>

class mylabel : public QLabel//注意需要继承QLabel,因为添加的控件是一个QLabel类型的
{
    Q_OBJECT
public:
    explicit mylabel(QWidget *parent = nullptr);

    //鼠标进入事件     子类重写父类的虚函数
    virtual void enterEvent(QEvent *event);

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

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

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

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


signals:

};

#endif // MYLABEL_H

mylabel.cpp中添加代码

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

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

}

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

}

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


//鼠标按下
void mylabel::mousePressEvent(QMouseEvent *ev)
{

    //当鼠标左键按下  提示信息
    if( ev->button() ==  Qt::LeftButton)
    {
        //链式编程
        QString str = QString( "鼠标按下了 x = %1   y = %2  globalX = %3 globalY = %4 " ).arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
        qDebug() << str;

        //qDebug() <<"鼠标按下了";
    }
}

//鼠标释放
void mylabel::mouseReleaseEvent(QMouseEvent *ev)
{
    if( ev->button() ==  Qt::LeftButton)
    {
        QString str = QString( "鼠标释放了 x = %1   y = %2  globalX = %3 globalY = %4 " ).arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());

        qDebug() << str;

        // qDebug() <<"鼠标释放";
    }

}

//鼠标移动
void mylabel::mouseMoveEvent(QMouseEvent *ev)
{
   // if( ev->buttons() & Qt::LeftButton )
    {
        QString str = QString( "鼠标移动了 x = %1   y = %2  globalX = %3 globalY = %4 " ).arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());

        qDebug() << str;

        // qDebug() <<"鼠标移动";
    }
}


3、在UI界面中将label控件提升为mylabel,在QFrame中设置显示其边框,方便观察
4、编译效果,鼠标在标签中移动或点击,打印相应的信息

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值