問題タブ [moc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
348 参照

c++ - QObject は moc ファイルを作成しますが、それでも vtable エラーが発生します

PrimitivePartsWrapper を QObject (Q_OBJECT マクロを含む) のサブクラスにした後、このエラーを振り払うことができないようです。

qmake を実行したところ、makefile に moc_primitive.cpp が含まれています。Qtクリエーターでのみ発生するようです。コマンド ラインで make を実行すると、プログラムはコンパイルされますが、組み込みの python で PrimitiveParts クラスが見つからないというエラーが発生します。これは無関係である可能性があります。QtCreator のエラーは、primitive.o ではなく register.o と関係がありますか? それともmoc_primitive.o?

プリミティブ.h:

プリミティブ.cpp:

0 投票する
1 に答える
3959 参照

qt - CMake + Qt : moc/ui 出力ディレクトリを定義します

現在、qmake でビルドしたプロジェクトを CMake に転送しています。

qmake を使用したバージョンでは、.pri ファイルに、

ソースをきれいに保ちながら、特定のディレクトリにMOC一時ファイルを生成することを許可しました。CMakeで同じことをする方法は?

注: CMake では、FindQt4.cmakeパッケージとコマンドを使用しますQT4_WRAP_CPP()

0 投票する
1 に答える
716 参照

compilation - Qt Creator がすべてのファイルで MOC を実行するのはなぜですか?

プリコンパイル済みヘッダーが有効になっている Qt プロジェクトがあります。コンパイルは最近まで正常に機能していました。しかし、露の日以来、Qt Creator が常にすべての Q_OBJECT ファイルで MOC を実行していることに気付きました。そのため、多くの CPP ファイルも理由もなく再構築する必要があります。

それが起こる理由はありますか?コンパイル出力を見ていますが、特別なことは何も見ていません。何か案が?

0 投票する
4 に答える
9752 参照

c++ - このシンプルな Qt アプリケーションがリンクしないのはなぜですか

次のような単純な Qt アプリケーションを作成しようとしました。

main.cpp :

しかし、Qt Creator 2.3.1 (Qt 4.7.4) でコンパイルしてリンクしようとすると、3 つの「未解決の外部シンボル」エラーが発生します。

  • main.obj:-1: エラー: LNK2001: 未解決の外部シンボル
    ""パブリック: 仮想構造体 QMetaObject const * __thiscall MyApp::metaObject(void)const "
    (?metaObject@MyApp@@UBEPBUQMetaObject@@XZ)".

  • main.obj:-1: エラー: LNK2001: 未解決の外部シンボル
    ""public: virtual void * __thiscall MyApp::qt_metacast(char const*)"
    (?qt_metacast@MyApp@@UAEPAXPBD@Z)".

  • main.obj:-1: エラー: LNK2001: 未解決の外部シンボル
    ""public: virtual int __thiscall MyApp::qt_metacall(enum QMetaObject::Call,int,void * *)"
    (?qt_metacall@MyApp@@UAEHW4Call@QMetaObject@ @HPAPAX@Z)".

QtのMetaObjectCompilerに何らかの関係があると思いますが、解決策がわかりません。宣言と定義を 1 つのファイルに入れることは、C++ で適切なプログラミング スタイルとは見なされないことはわかっていますが、それはここでのポイントではありません。私の意見では、ここには構文的に間違っているものは何もないので、可能であるはずです。

0 投票する
3 に答える
1624 参照

qt - .cppファイルにQ_OBJECTマクロがある場合、プロジェクトがリンクしないのはなぜですか?

このコードは、意図したとおりにコンパイル、リンク、および動作します。

しかし、クラス定義.cppをヘッダーファイルではなくファイルに入れると、vtable正しく定義されていないことを示すリンカーエラーが発生します。

これはまったく同じコードのようです。コードがヘッダーにあり、それ以外の場合はリンクしないのに、なぜリンクするのですか?

0 投票する
7 に答える
5824 参照

qt - qmakeプロジェクトでmocに特定のフラグを追加するには?

qmake && make次のファイルを使用して Qt 実行可能ファイルをコンパイルしproject.proます。

ただし、コンパイル時に、moc解析できないブースト マクロでチョークします。このバグを回避するには、moc にフラグを渡す必要がありますが、-DBOOST_TT_HAS_OPERATOR_HPP_INCLUDEDうまくいきません。

.pro特定のフラグを に渡すようにファイルを編集するにはどうすればよいmocですか? (ただし、そうg++QMAKE_CXXFLAGSはありません)

0 投票する
1 に答える
505 参照

qt - 一部の場所から実行するとQtmocが機能しない

Windows 7でjomを使用してコンパイルしようとしているQtプロジェクトがあります。ソースが1つの場所にある場合は、コマンドラインから正常にコンパイルできます。ただし、別の場所にあるgitからソースをプルしてコンパイルしようとすると、次のエラーが発生します

moc:指定された入力ファイルが多すぎます

どちらの場合も、同じgitリポジトリからプルしているだけで、コードは1つの場所で正常にコンパイルされ、別の場所では失敗するため、これは本当に奇妙です。私はnmakeを試しましたが、同じ結果が得られました。

比較として、ここに2つのコマンドがあります。最初のものは失敗し、2番目のものは成功します。

何が起こっているのかアイデアはありますか?

0 投票する
1 に答える
4774 参照

qt4 - 複数の定義エラー: 1 つは私のファイルにあり、もう 1 つは moc ファイルにあります。

FindAndReplaceBar というクラスがあり、その実装は次のとおりです。

プログラムを実行すると、関数の複数の定義の問題が発生します。

findNext(), findPrevious(), replace(), replaceAll().

もう 1 つの定義は、moc_FindAndReplaceBar.cpp ファイルで行われます。何が問題なのかわからないので、それを修正する方法がわかりません!助けていただければ幸いです、ありがとう!

0 投票する
2 に答える
7059 参照

qt - Qt moc_file の問題

私は学生プログラマーであり、Qt を使用して仕事用の GUI アプリケーションを作成していますが、moc の問題に何度も遭遇しています。私が抱えている現在の問題の解決策を望んでいました。ただし、Qt のベテランの方が、cpp ファイルに変更を加える際にこれらのファイルを適切に処理する方法に光を当てることができれば、助けていただければ幸いです。私の最近の変更 (明らかに再構築されているため、どのように表示されたかを投稿できません) では、checkData 関数内に関数をネストしてデータを検証していました。無効である可能性のあるフィールドごとに特定のエラーを表示したいので、QLineEdit ごとに関数を作成し始めました。これは、情報のシーケンスチェックを提供するだけでは機能しない (または、少なくともより多くの作業が必要になる) ことに気付きました。

最初は、最初のチェックに InjectionDialog::checkFluidVelociy がありましたが、すぐにやめることにしました。コードを再構築すると、次のエラーが表示されます。

関数 'InjectionDialog::checkFluidVelocity(QMetaObject::Call, int, void**)': このエラーは moc_injectionDialog.o を参照しています

'InjectionDialog::checkFluidVelocity()' への参照が不明です。このエラーは moc_injectiondialog.cpp を参照しています

moc_injectiondialog には、次のものがリストされています。

私は他の moc_file 投稿のいくつかを調べましたが、それらのほとんどは Qt をきれいにしてプロジェクトを再構築するように言っています。プロジェクトのクリーンアップと再構築を実行して、この moc ファイルをオーバーホールしようとしましたが、エラーを取り除くことに成功していません。バグのようですが、オンラインで何も見つけられなかったので、私が知らないものかもしれません。よろしくお願いいたします。

0 投票する
1 に答える
4492 参照

qt - Qt プログラムがリンクせず、moc ファイルが生成されない

Qt、CMake、および VS2010 コンパイラを使用しています。小さなテスト コードをリンクしているときに問題があるようです。リンカーは次のエラーを返します。

(しばらく続きます)

次のコードで QObject から継承しようとすると、エラーが発生します。

Q_OBJECT を省略した場合、プログラムはリンクしますが、実行時にクラス スロットを使用できません。plotter.h の moc ファイルが生成されていないことに気付きました。これは私の CMakeLists.txt です:

dialog.cpp に対して moc ファイルが生成されますが、plotter.cpp に対しては生成されません。これはどのように可能ですか?

ありがとう!