使用QLabel时,想让其能够像Web中的超链接的样式(下划线、字体颜色),并能够进行点击触发相应的信号。但是查看帮助发现原生的QLabel很难满足需求,所以觉得自定义一个MyLabel类继承并扩展QLabel。
直接将代码贴上来,方便日后自己查找和利用。
头文件MyLabel.h:
#ifndef MYLABEL_H
#define MYLABEL_H
#include <QLabel>
class MyLabel : public QLabel
{
Q_OBJECT
public:
MyLabel(QWidget *parent=0);
MyLabel(const QString &text,QWidget *parent=0);
~MyLabel();
private:
QString m_str;
bool isClicked;
protected:
void mousePressEvent(QMouseEvent *ev);
void mouseMoveEvent(QMouseEvent *ev);
void mouseReleaseEvent(QMouseEvent *ev);
signals:
void Clicked();
};
#endif // MYLABEL_H
cpp文件:
#include "MyLabel.h"
MyLabel::MyLabel(QWidget *parent)
: QLabel(parent)
{
}
MyLabel::MyLabel(const QString &text,QWidget *parent): QLabel(parent)
{
m_str=text;
QString str="<style> a {text-decoration: underline} </style> <a style='color: blue;' href = > "+m_str+"</a>";
this->QLabel::setText(str);
}
MyLabel::~MyLabel()
{
}
void MyLabel::mousePressEvent(QMouseEvent *ev)
{
Q_UNUSED(ev);
isClicked= true;
}
void MyLabel::mouseMoveEvent(QMouseEvent *ev)
{
Q_UNUSED(ev);
isClicked= false;
}
void MyLabel::mouseReleaseEvent(QMouseEvent *ev)
{
Q_UNUSED(ev);
if(isClicked)
{
emit Clicked();
isClicked = false;
}
}</span><span style="color:#ff9966;">
</span>
这就是全部代码,并且,还可以将这个自定义的Label应用于各种场合,很方便,也可以嵌入TreeWidget中进行直观的参数设置,后续再进行追加。