Ich möchte eine QLabel
in Qt haben, die auf das Mausklickereignis reagiert. Ich habe verschiedene ähnliche Lösungen gefunden, die offenbar nicht in meiner aktuellen Version 5.8.x arbeitenFehler beim Kompilieren einer anklickbaren QLabel
Diese den Konsens zu sein scheint, wie zu tun, was ich will: https://wiki.qt.io/Clickable_QLabel
Wenn ich nehmen, dass das Programm schlägt mit dem Fehler zu kompilieren:
QtProjects/HelloWorldTest/qclickablelabel.cpp:5: error: undefined reference to `vtable for QClickableLabel'
(I ClickableLabel
zu QClickableLabel
umbenannt, weil es mehr Sinn für mich macht, der Rest ist 1: 1)
ich diese Fehlermeldung gejagt und gefunden die Lösung entfernen Sie einfach das Q_OBJECT
Makro, was wiederum zu diesem Fehler führt, die den geringsten Sinn für mich macht:
#ifndef QCLICKABLELABEL_H
#define QCLICKABLELABEL_H
#include <Qt>
#include <QWidget>
#include <QLabel>
class QClickableLabel : public QLabel {
//Q_OBJECT
public:
explicit QClickableLabel(QWidget* parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags());
~QClickableLabel();
signals:
void clicked();
protected:
void mousePressEvent(QMouseEvent* event);
};
#endif // QCLICKABLELABEL_H
.
#include "qclickablelabel.h"
#include <QDebug>
QClickableLabel::QClickableLabel(QWidget* parent, Qt::WindowFlags f)
: QLabel(parent) {
}
QClickableLabel::~QClickableLabel() {}
void QClickableLabel::mousePressEvent(QMouseEvent* event) {
emit clicked(); // <----- Error happens here
}
Fehlermeldung:
QtProjects/HelloWorldTest/qclickablelabel.cpp:12: error: undefined reference to `QClickableLabel::clicked()'
Die QClickableLabel::clicked
wird als ein Signal definiert und emittieren ist, Signale für das Anheben. Warum findet der Compiler die Methode nicht?
Die vorhandenen Lösungen scheinen veraltet zu sein, daher wäre eine Möglichkeit, dies für die aktuelle Version zu erreichen, sehr zu begrüßen!
Wie bauen Sie das? Sie müssen 'moc' auf' qclickable- label.h' ausführen und dann mit dem erzeugten Code kompilieren und verlinken (wobei das 'Q_OBJECT' offensichtlich unkommentiert ist). –