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

来源:互联网 发布:舞蹈mmd软件 编辑:程序博客网 时间:2024/06/08 18:58

有时候我们需要在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/slotspublic:    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类,同时需要将这个类的信号与你的槽绑定起来。就能实现点击的效果了。