我想在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')。 –