3

私はcmakeを使用するQtベースのプロジェクトに取り組んでいます。生成されたすべてのmocファイルには名前が付けられていますが、生成されたmocファイルに。ではなく*.moc名前が付けられているファイルがいくつかあります。これが発生する理由と、これらのファイルを修正する方法。moc_*.cpp*.moc

編集:

  • これらのクラスはQObjectを継承しており、Q_OBJECTマクロとQ_DECLARE_PUBLICマクロがあり、.mocがない限り、コンパイルされません。

  • .cppファイルに.mocファイルを含める必要があります。

-.mocを生成する同一のクラス(私のクラスと同一の実装)がありますが、私のクラスはmoc_*。cppを生成することに夢中になります。

4

1 に答える 1

2

Q_OBJECT を使用するすべての場合に *.moc ファイルを含める必要はありません。.moc ファイルは、.cpp ファイルで宣言されているクラスに対してのみ生成されます。それ以外の場合、moc は独自の Q_OBJECT ベースのクラスを含む moc_*.cpp を生成します。何も心配する必要はありません。*.moc インクルードを cpp ファイルから削除します。例えば:

main.cpp

class E: public QObject
{
    Q_OBJECT
};

moc は、main.cpp に含まれる main.moc ファイルを生成します。

もう一つの例

class.h

class E: public QObject
{
     Q_OBJECT
public:
     void member();
};

クラス.cpp

#include "class.h"

void E::member()
{
}

moc は、class.h を含み、別のコンパイル ユニットである moc_class.cpp を生成します。

于 2012-07-27T11:36:39.117 に答える