QLabel实现点击发送信号clicked
(2015-10-30 09:57:01)
标签:
qlabelclickedqtit |
分类: qt |
不多说,直接发代码
#ifndef CCLICKLABEL_H
#define CCLICKLABEL_H
#include "stdafx.h"
class CClickLabelPrivate;
class CClickLabel : public QLabel
{
Q_OBJECT
public:
CClickLabel(QWidget *parent = 0, Qt::WindowFlags f = 0);
CClickLabel(const QString &text, QWidget *parent = 0,
Qt::WindowFlags f = 0);
virtual ~CClickLabel();
Q_SIGNALS:
/// @brief emit when mouse click label
void clicked();
protected:
virtual void mousePressEvent(QMouseEvent *e);
virtual void mouseReleaseEvent(QMouseEvent *e);
private:
Q_DISABLE_COPY(CClickLabel)
Q_DECLARE_PRIVATE(CClickLabel)
CClickLabelPrivate* const d_ptr;
};
#endif // CCLICKLABEL_H
// **************************************************************************
// share library for Qt (C++)
// 共享源码库
// 文档说明:可发出clicked信号的Label部件
// ==========================================================================
/// @fileCClickLabel.cpp 可发出clicked信号的Label部件
// ==========================================================================
#include "../../include/CClickLabel.h"
class CClickLabelPrivate
{
Q_DECLARE_PUBLIC(CClickLabel)
public:
explicit CClickLabelPrivate(CClickLabel *qptr);
~CClickLabelPrivate();
QPoint pos;
CClickLabel* const q_ptr;
};
CClickLabelPrivate::CClickLabelPrivate(CClickLabel *qptr) : q_ptr(qptr)
{
}
CClickLabelPrivate::~CClickLabelPrivate()
{
}
CClickLabel::CClickLabel(QWidget *parent, Qt::WindowFlags f)
: QLabel(parent, f), d_ptr(new CClickLabelPrivate(this))
{
}
CClickLabel::CClickLabel(const QString &text, QWidget *parent, Qt::WindowFlags f)
: QLabel(text, parent, f), d_ptr(new CClickLabelPrivate(this))
{
}
CClickLabel::~CClickLabel()
{
delete d_ptr;
}
void CClickLabel::mousePressEvent(QMouseEvent *e)
{
QLabel::mousePressEvent(e);
Q_D(CClickLabel);
if (e->button() == Qt::LeftButton)
{
d->pos = e->pos();
}
}
void CClickLabel::mouseReleaseEvent(QMouseEvent *e)
{
QLabel::mouseReleaseEvent(e);
Q_D(CClickLabel);
if (e->button() == Qt::LeftButton)
{
if (e->pos() == d->pos)
{
Q_EMIT clicked();
}
}
}