4

Qt Visual Studio 統合を使用して、新しい Qt クラスを追加すると、2 つの別個の moc.exe 生成ファイルが追加されます。それでも、最終的に生成される 2 つのファイルは同じように見えます。

一方、UI クラスを追加する場合、uic.exe によって生成されたファイルにはこの分離がなく、すべての構成で同じファイルになります。

構成ごとに個別の moc ファイルが必要な理由を知っている人はいますか? 2つの違いはいつですか?

4

2 に答える 2

8

moc出力はユーザー定義のソースコードから生成されるため、デバッグバージョンとリリースバージョンを別々に使用する必要があると思います。したがって、前処理されたクラスソースがデバッグとリリースで異なる場合(たとえば、デバッグビルドにのみ存在するシグナル)、moc出力はデバッグビルドとリリースビルドで異なる可能性があります。

これは、uicで生成されたファイルには適用されません。これらのファイルは.ui XMLから生成され、デバッグ構成とリリース構成の間で変更できないためです。

于 2008-10-09T04:14:19.980 に答える
7

Mocは、プリプロセッサディレクティブのソースを解析します。したがって、次のようなヘッダーファイルがある場合:

class Test : public QObject
{
    Q_OBJECT
public:
        Test();             
public slots:

#ifndef DEBUG
        void    Foo();
#endif
};

その場合、スロットFooはリリースビルドにのみ存在し、デバッグビルドには存在しません。Mocは、DEBUG(この場合)シンボルが設定されているかどうかに応じて、異なるmoc.cppファイルを生成します。

于 2008-10-09T04:16:33.190 に答える