Qt 中自定义QLabel上的点击事件

有时候我们需要在QLabel上显示一张图片,然后通过点击这张图片来处理下一步的 事情。但是Qt中QLabel默认是没有点击效果的,只能通过QPushButton 或者QToolButton来处理点击的事件,这样就具有局限性了。
我们可以通过继承QLabel来自定义QLabel来实现这种点击效果

/*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 mousePressEvent(QMouseEvent* event);                 // 鼠标单击事件
   void mouseDoubleClickEvent(QMouseEvent *event);           // 鼠标双击事件
};

#endif // MYCLICKLABEL_H
/*myclickLabel.cpp*/
#include "myclicklabel.h"



MyClickLabel::MyClickLabel(QWidget *parent):QLabel(parent)
{

}


void MyClickLabel::mousePressEvent(QMouseEvent *event)
{
    emit myClicked();  // 当鼠标单击的时候,发出点击信号
}

void MyClickLabel::mouseDoubleClickEvent(QMouseEvent *event)
{
    emit myDoubleClicked();  // 当鼠标双击的时候,发出双击的信号
}

这样,自定义QLabel就完成 了,通过继承这个MyClickLabel类,同时需要将这个类的信号与你的槽绑定起来。就能实现点击的效果了。

猜你喜欢

转载自blog.csdn.net/yaowangii/article/details/78643625