有的时候我们不想用QPushbutton,想像网站上超链接一样,通过点击标签就可以实现跳转。
但是qt自带的QLabel被单击的时候,不会发送出被单击的信号signal。所以我们可以继承QLabel,实现自己需要的label。
见代码:
.h文件
#include <QLabel>
/*************************************************
Class Name: IMClickLabel
Description: 具有单击相应的标签类
*************************************************/
class IMClickLabel : public QLabel
{
Q_OBJECT
public:
explicit IMClickLabel(QWidget *parent = 0);
IMClickLabel(const QString &text, QWidget *parent=0);
signals:
// 鼠标单击信号
void clicked();//IMClickLabel* label);
protected:
// 鼠标单击事件
void mouseReleaseEvent(QMouseEvent *);
void enterEvent(QEvent *);
void leaveEvent(QEvent *);
public slots:
};
#endif // IMCLICKLABEL_H
.cpp文件
#include "IMClickLabel.h"
#include <QMouseEvent>
// mark: public:--------------------------------------------------
IMClickLabel::IMClickLabel(QWidget *parent) :
QLabel(parent)
{
QPalette pa;
pa.setColor(QPalette::WindowText, Qt::darkGreen);
setPalette(pa);
}
IMClickLabel::IMClickLabel(const QString &text, QWidget *parent) :
QLabel(parent)
{
setText(text);
}
// mark: protected:------------------------------------------------
void IMClickLabel::mouseReleaseEvent(QMouseEvent *ev)
{
if (ev->button() == Qt::LeftButton)
emit clicked();//(this);
}
void IMClickLabel::enterEvent(QEvent * )
{
QPalette pa;
pa.setColor(QPalette::WindowText, Qt::blue);
setPalette(pa);
}
void IMClickLabel::leaveEvent(QEvent *)
{
QPalette pa;
pa.setColor(QPalette::WindowText, Qt::darkGreen);
setPalette(pa);
}
通过重装enterEvent()事件函数,可以实现鼠标移动至QLabel改变颜色的效果。
然后重载leaveEvent()事件函数,可以实现鼠标移出QLbel变回原来颜色的效果。
通过重载mouseReleaseEvent()事件函数,发送clicked()信号,可以供用户通过slot槽函数绑定,然后做出相应的处理。