4

Visual Studio 2010 Ultimate プロジェクトで Q_OBJECT マクロを使用しようとすると、未解決の外部エラーが発生します。

1>Application.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall MyButton::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@MyButton@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
1>Application.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall MyButton::qt_metacast(char const *)" (?qt_metacast@MyButton@@UAEPAXPBD@Z)
1>Application.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall MyButton::metaObject(void)const " (?metaObject@MyButton@@UBEPBUQMetaObject@@XZ)

QMaker を使用して同様のプロジェクトがあり、クリーンなプロジェクトを実行して qmake を再実行することで解決しました。問題は、VS に「Qmake」ボタンがないことです。

私はこのような記事をいくつか読んだことがありますが、彼らが私に指示したことはすべて実行しました。いくつかの .cpp といくつかのヘッダー ファイルの既存のプロジェクトがあり、.pro ファイルを作成してコードをそこに移動することは避けたいので、実際には役に立ちませんでした。

VS Qt アドインをインストールしました。VS パネルに新しいクールな「Qt」ボタンが表示されましたが、未解決の外部要素には対応していませんでした (おそらく、適切に使用する方法がわかりません)。

Application.h ファイル (Q_OBJECT を持つ唯一のファイル) で VS のカスタム ビルド ツールを使用して moc を実行しましたが、それでも解決しませんでした:

C:\Utilities\QtSDK\Desktop\Qt\4.8.1\msvc2010\bin\moc Application.h -o tmp\moc\moc_Application.cpp

問題の原因と解決方法を教えてください。

4

1 に答える 1

5

MOC によって生成されたファイル (この場合は moc_Application.cpp) を Visual Studio プロジェクトに追加するのを忘れていたと思います。確実にビルドするには、これを行う必要があります。これにより、表示されるリンカー エラーが解決されるはずです。

于 2012-09-19T12:52:40.253 に答える