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