1

DoubleClickEvent を追加する QLabel サブクラスを作成しています。私は以下を作成しましたが、いくつかの奇妙なリンカ エラーが発生しています。

//Header
#ifndef IMAGE_LABEL_H
#define IMAGE_LABEL_H

#include <QLabel>
#include <QMouseEvent>

class image_label : public QLabel
{
    Q_OBJECT
public:
image_label(QWidget* parent = 0);
~image_label();

signals:
    void doubleClicked();

protected:
    void mouseDoubleClickEvent(QMouseEvent * e);

};


#endif


//CPP 

#include "image_label.h"
#include <QMouseEvent>

image_label::image_label(QWidget* parent) : QLabel(parent)
{
}

image_label::~image_label()
{
}

void image_label::mouseDoubleClickEvent(QMouseEvent* e)
{
    if (e->button() == Qt::LeftButton)
    {
        emit doubleClicked();
        QLabel::mouseDoubleClickEvent(e);
    }
}

コンパイル時に次のリンカ エラーが発生します。

 image_label.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall image_label::metaObject(void)const " (?metaObject@image_label@@UBEPBUQMetaObject@@XZ)

  image_label.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall image_label::qt_metacast(char const *)" (?qt_metacast@image_label@@UAEPAXPBD@Z)

  image_label.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall image_label::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@image_label@@UAEHW4Call@QMetaObject@@HPAPAX@Z)

  image_label.obj : error LNK2019: unresolved external symbol "protected: void __thiscall image_label::doubleClicked(void)" (?doubleClicked@image_label@@IAEXXZ) referenced in function "protected: virtual void __thiscall image_label::mouseDoubleClickEvent(class QMouseEvent *)" (?mouseDoubleClickEvent@image_label@@MAEXPAVQMouseEvent@@@Z)

これらのエラーが発生する理由を誰か助けてもらえますか?

4

1 に答える 1

1

ファイルに対して MOC プリプロセッサを実行する必要がありますimage_label.hmoc_image_label.cppこれにより、ビルドに含める必要があるファイルが生成されます。エラー メッセージは、これを行っていないことを示しています。(エラーメッセージに記載されている記号image_label::metaObject等は に定義されていmoc_image_label.cppます。)

于 2012-04-04T11:07:18.300 に答える