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

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

目录

 一、myclickLabel.cpp文件

 二、myclickLabel.h文件

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

四、调用

五、说明

 一、myclickLabel.cpp文件

/*myclickLabel.cpp*/
#include "myclicklabel.h"
#include 
#include 
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 
#include 
#include 
#include 
#include 
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为调用的方法

 

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

你可能感兴趣的:(qt,qt,c++,开发语言)