我想在Qt中有一个QLabel
这对鼠标点击事件有反应。我找到了各种类似的解决方案,似乎没有在我目前的版本5.8.x工作麻烦编译一个可点击的QLabel
这似乎是如何来完成我想要的共识:https://wiki.qt.io/Clickable_QLabel
如果我拿去,程序失败,出现错误编译:
QtProjects/HelloWorldTest/qclickablelabel.cpp:5: error: undefined reference to `vtable for QClickableLabel'
(我改名ClickableLabel
到QClickableLabel
因为它使我更有意义,剩下的就是1:1)
我追杀此错误信息,发现该解决方案只删除了Q_OBJECT
宏,这反过来又导致这个错误,使最有意义的我:
#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
}
错误消息:
QtProjects/HelloWorldTest/qclickablelabel.cpp:12: error: undefined reference to `QClickableLabel::clicked()'
的QClickableLabel::clicked
被定义为一个信号,并发射是提高的信号。那为什么编译器不能找到这个方法呢?
现有的解决方案似乎已经过时,所以要想达到目前版本的方法,我们将不胜感激!
你是怎么建立这个的?您需要在'qclickablelabel.h'上运行'moc',然后编译并链接它生成的代码(显然,未注释'Q_OBJECT')。 –