QtをVsに統合し、.proファイルをコンパイルしようとすると、次のエラーが発生します。
Error 9 error LNK2001: unresolved external symbol "public: virtual int __thiscall Multiplication_dialog::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@Multiplication_dialog@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
Error 7 error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall Multiplication_dialog::metaObject(void)const " (?metaObject@Multiplication_dialog@@UBEPBUQMetaObject@@XZ)
Error 8 error LNK2001: unresolved external symbol "public: virtual void * __thiscall Multiplication_dialog::qt_metacast(char const *)" (?qt_metacast@Multiplication_dialog@@UAEPAXPBD@Z)
これで何をしますか?
通常、foo.hのmoc_foo.cpp(Q_OBJECTでマークされたクラスを含む)がプロジェクトでコンパイルまたはリンクされていない場合、これらのエラーが発生します。
QtプロジェクトをVSで機能させるには
アドインを使用する場合は、moc_foo.cppの作成をトリガーできます。
これで、ソリューションエクスプローラーの「生成されたファイル」フォルダーにmoc_multiplication_dialog.cppの2つのバージョンがあるはずです。 1つは「デバッグ」用、もう1つは「リリース」用です。これらのファイルの1つがnotがビルドから除外されていることを確認してください。
今日も同じリンカエラーに直面しましたが、それは小さなずれが原因でした。
Cpp/uiファイルをプロジェクトに手動で追加しましたが、ヘッダーファイルをヘッダーファイルとして明示的に追加するのを忘れていました。コンパイルすると、上記と同様のエラーメッセージが表示され、ビルドのデバッグ(またはリリース)ディレクトリにmoc _ *。cppファイルが生成されませんでした。それはそれほど明らかな間違いではありませんでした。qmakeは文句を言わず、リンカーメッセージ以外にエラーはありませんでした。
したがって、誰かが同じ問題に再び遭遇した場合(または同じコピーと貼り付けを間違えた場合):ヘッダーファイルもプロジェクトファイルに追加されていることを確認してください
書籍「Qt 4を使用したC++ GUIプログラミング」(19ページ)から引用:mocが正しく機能するためには、実装ファイルとは別のヘッダーファイルにクラス定義を配置する必要があります。したがって、クラスに2つのファイルMultiplication_dialog.hとMultiplication_dialog.cppを書き込む必要があります。そして、makefileを再作成する必要があります!
さて、今日私はおそらく同じ問題に直面しました。スレッドがかなり古いことを知っています。しかし、それはまだ誰かを助けるかもしれません。
私の場合に起こったことはmoc
がmoc_ .cpp
ファイルがVCもコンパイルする必要があることを認識していません。そのため、mocで生成されたファイルを手動で追加してコンパイルしました。
現在、QT 5.4アドインを使用してVS 2013で作業しています。アドインを使用してプロジェクトをビルドすると、モック処理が自動的に処理されるため、作業が簡単になります。 Qt metaObjectの問題によるリンカーエラーの問題を防ぐには:
クラス宣言に含まれているすべてのヘッダーファイルでQ_OBJECTのすべてのインスタンスをコメント化します。
ソリューションを構築する
ヘッダーファイル内のQ_OBJECTのすべてのインスタンスのコメントを外します。
ソリューションを再構築します。ここで、すべてのヘッダーファイルとcppファイルが再コンパイルされ、moc'ingが自動的に行われます。次に、リンカエラーが処理されます。
Qt Addin for VSを使用したときに同じ問題が発生しました。mocファイルare not included into project
ビルド後。これらのエラーをプロジェクトに含めました。
プロジェクトの。proを再起動してみてください。
上記のかなり長い説明。
メニューバーのQt Creatorの使用:
ビルド> qmakeを実行
ビルド>すべてビルド