Clickable QLabel: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
Marco Sulla (talk | contribs) (Added includes, changed constructor) |
||
(7 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
{{LangSwitch}} | |||
A "clicked" signal may sometimes be required from a label, but there is no "clicked" signal emitted by QLabel. You can work around this easily by making a QPushButton like a label by setting the 'flat' property. | |||
However, if there are other properties of a QLabel object that you need, here is a code snippet for a custom QLabel which can emit a signal: 'clicked'. In other words, a Clickable QLabel! | |||
== Header == | |||
<code> | |||
#ifndef CLICKABLELABEL_H | |||
#define CLICKABLELABEL_H | |||
#include <QLabel> | |||
#include <QWidget> | |||
#include <Qt> | |||
class ClickableLabel : public QLabel { | |||
Q_OBJECT | |||
== | public: | ||
explicit ClickableLabel(QWidget* parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags()); | |||
~ClickableLabel(); | |||
* | signals: | ||
* [[ | void clicked(); | ||
protected: | |||
void mousePressEvent(QMouseEvent* event); | |||
}; | |||
#endif // CLICKABLELABEL_H | |||
</code> | |||
== Source == | |||
<code> | |||
#include "clickablelabel.h" | |||
ClickableLabel::ClickableLabel(QWidget* parent, Qt::WindowFlags f) | |||
: QLabel(parent) { | |||
} | |||
ClickableLabel::~ClickableLabel() {} | |||
void ClickableLabel::mousePressEvent(QMouseEvent* event) { | |||
emit clicked(); | |||
} | |||
</code> | |||
What we do here is simple: Catch the mouse press event on the label. Then emit 'clicked' signal. We could as well make the signal be emitted when mouse gets released. This is let to be a decision of the developer. | |||
[[Category:Developing_with_Qt]] |
Revision as of 07:13, 18 May 2017
A "clicked" signal may sometimes be required from a label, but there is no "clicked" signal emitted by QLabel. You can work around this easily by making a QPushButton like a label by setting the 'flat' property.
However, if there are other properties of a QLabel object that you need, here is a code snippet for a custom QLabel which can emit a signal: 'clicked'. In other words, a Clickable QLabel!
Header
#ifndef CLICKABLELABEL_H
#define CLICKABLELABEL_H
#include <QLabel>
#include <QWidget>
#include <Qt>
class ClickableLabel : public QLabel {
Q_OBJECT
public:
explicit ClickableLabel(QWidget* parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags());
~ClickableLabel();
signals:
void clicked();
protected:
void mousePressEvent(QMouseEvent* event);
};
#endif // CLICKABLELABEL_H
Source
#include "clickablelabel.h"
ClickableLabel::ClickableLabel(QWidget* parent, Qt::WindowFlags f)
: QLabel(parent) {
}
ClickableLabel::~ClickableLabel() {}
void ClickableLabel::mousePressEvent(QMouseEvent* event) {
emit clicked();
}
What we do here is simple: Catch the mouse press event on the label. Then emit 'clicked' signal. We could as well make the signal be emitted when mouse gets released. This is let to be a decision of the developer.