Qt重写QLabel控件类-实现QLabel鼠标事件功能

 在项目开发中,难免遇到官方控件无法满足实际应用需求问题,此时就需要各位朋友们多多动脑和动手,成年人的生活啊,除了发胖和掉头发容易,其他都不容易。本文自定义重写Qt中QLabel控件类,实现鼠标事件功能。

目录

 一、myclickLabel.cpp文件

 二、myclickLabel.h文件

三、QLabel控件继承自定义类MyClickLabel 

四、调用

五、说明

 一、myclickLabel.cpp文件

/*myclickLabel.cpp*/
#include "myclicklabel.h"
#include <QDebug>
#include <QMoveEvent>
MyClickLabel::MyClickLabel(QWidget *parent):QLabel(parent)
{

}

//鼠标进入
void MyClickLabel::enterEvent(QEvent *event)
{
    qDebug() << "提示:" << "鼠标进入";
    emit myDoubleClicked();
}
//鼠离开
void MyClickLabel::leaveEvent(QEvent *event)
{
    qDebug() << "提示:" << "当鼠离开";
    emit myDoubleClicked();
}
//鼠标按下
void MyClickLabel::mousePressEvent(QMouseEvent *event)
{
    QString  Str=QString("按下位置:X=%1 Y=%2").arg(event->x()).arg(event->y());

    //判断鼠标是按下左键还是右键
    if(event->button()==Qt::LeftButton){
        qDebug() << "提示:" << "鼠标按下左键"+Str;
        emit myClicked();
    }else{
        qDebug() << "提示:" << "鼠标按下右键"+Str;
    }
}
//鼠标释放
void MyClickLabel::mouseReleaseEvent(QMouseEvent *event)
{
    //判断鼠标是按下左键还是右键
    if(event->button()==Qt::LeftButton){
        qDebug() << "提示:" << "鼠标释放左键";
    }else{
        qDebug() << "提示:" << "鼠标释放右键";
    }
}
//鼠标移动
void MyClickLabel::mouseMoveEvent(QMouseEvent *event)
{
    //持续状态 需要用buttons 用与操作符 进行判断
    if(event->buttons()&Qt::LeftButton){
        QString  Str=QString("按下位置:X=%1 Y=%2").arg(event->x()).arg(event->y());
        qDebug() << "提示:" << "鼠标移动"+Str;
    }
}
//当鼠标双击的时候
void MyClickLabel::mouseDoubleClickEvent(QMouseEvent *event)
{
    qDebug() << "提示:" << "当鼠标双击的时候,发出双击的信号";
    emit myDoubleClicked();
}

 二、myclickLabel.h文件

/*myclickLabel.h*/
#ifndef MYCLICKLABEL_H
#define MYCLICKLABEL_H
#include <QWidget>
#include <QLabel>
#include <QObject>
#include <QEvent>
#include <QMouseEvent>
class MyClickLabel : public QLabel
{
     Q_OBJECT    // must include this if you use Qt signals/slots
public:
    explicit MyClickLabel(QWidget *parent = 0);

signals:
   void myClicked();                    // 单击产生的信号
   void myDoubleClicked();              // 双击产生的信号

private:
   void enterEvent(QEvent* event);// 鼠标进入事件
   void leaveEvent(QEvent *event);//当鼠离开
   void mousePressEvent(QMouseEvent* event); //鼠标按下
   void mouseReleaseEvent(QMouseEvent *event);//鼠标释放
   void mouseMoveEvent(QMouseEvent *event);//鼠标移动
   void mouseDoubleClickEvent(QMouseEvent *event);// 鼠标双击事件
};

#endif // MYCLICKLABEL_H

三、QLabel控件继承自定义类MyClickLabel 

      如何对控件默认类调整为继承自定义类,请点击下方链接查看文章:     Qt 中控件默认类修改为继承自定义类方法_TryRestart的博客-CSDN博客

四、调用

方法一:
 connect(ui->label_touxiang, &MyClickLabel::myClicked, []() {
        QMessageBox::warning(nullptr, "tip", "this is clickable label");
    });

方法二:
connect(ui->label_touxiang, &MyClickLabel::myClicked, this, &MainWindow::label_touxiang);

五、说明

注意: ui->label_touxiang为控件对象名称,label_touxiang为调用的方法

 

 不愿清醒,宁愿一直沉迷放纵。不知归路,宁愿一直无悔追逐。

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TryRestart

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值