Clickable QLabel: Difference between revisions
Jump to navigation
Jump to search
(Cleanup) |
(Fix code formatting) |
||
(One intermediate revision by one other user not shown) | |||
Line 6: | Line 6: | ||
== Header == | == Header == | ||
< | <nowiki> | ||
class ClickableLabel : public QLabel | #ifndef CLICKABLELABEL_H | ||
{ | #define CLICKABLELABEL_H | ||
Q_OBJECT | |||
#include <QLabel> | |||
#include <QWidget> | |||
#include <Qt> | |||
class ClickableLabel : public QLabel { | |||
Q_OBJECT | |||
public: | public: | ||
explicit ClickableLabel( | explicit ClickableLabel(QWidget* parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags()); | ||
~ClickableLabel(); | ~ClickableLabel(); | ||
signals: | signals: | ||
void clicked(); | void clicked(); | ||
protected: | protected: | ||
void mousePressEvent(QMouseEvent* event); | void mousePressEvent(QMouseEvent* event); | ||
}; | }; | ||
</ | |||
#endif // CLICKABLELABEL_H | |||
</nowiki> | |||
== Source == | == Source == | ||
< | <nowiki> | ||
ClickableLabel::ClickableLabel( | #include "clickablelabel.h" | ||
: QLabel(parent) | |||
{ | ClickableLabel::ClickableLabel(QWidget* parent, Qt::WindowFlags f) | ||
: QLabel(parent) { | |||
} | } | ||
ClickableLabel::~ClickableLabel() | ClickableLabel::~ClickableLabel() {} | ||
{ | |||
} | |||
void ClickableLabel::mousePressEvent(QMouseEvent* event) | void ClickableLabel::mousePressEvent(QMouseEvent* event) { | ||
{ | |||
emit clicked(); | emit clicked(); | ||
} | } | ||
</ | |||
</nowiki> | |||
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. | 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]] | [[Category:Developing_with_Qt]] |
Latest revision as of 13:32, 29 January 2021
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.