マウスクリックイベントに反応するQtにQLabel
を入れたいと思います。 、プログラムを私はそれを取る場合はhttps://wiki.qt.io/Clickable_QLabelクリック可能なQLabelをコンパイルする際の問題
:私はこれは私が欲しいものを達成する方法についてのコンセンサスのようだ私の現在のバージョン5.8.x
で作業していないよう様々な同様のソリューションを発見しましたエラーでコンパイルに失敗します。
QtProjects/HelloWorldTest/qclickablelabel.cpp:5: error: undefined reference to `vtable for QClickableLabel'
(それは私に多くの意味がありますので、私はQClickableLabel
にClickableLabel
と改名、残りは1:1)
が、私はこのエラーメッセージを追い詰め、見つかりました
#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
:ちょうど今度は私にとって最も理にかなって、このエラーにつながる、Q_OBJECT
マクロを削除するためのソリューション。
#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'のコメントを外しておく必要があります)。 –