6

OpenSuse 11.2 と QT バージョン 4.5 で問題なくコンパイルできるプログラムがあります。ただし、OpenSuse 11.4 と QT 4.7.3 を使用して同じプログラムをコンパイルすると、次のエラー メッセージが表示されます。

"This file was generated using the moc from 4.7.3. It cannot be used with the include    files from this version of Qt. The moc has changed too much"

誰が何が起こっているのか教えてもらえますか?

4

3 に答える 3

8

このエラーは、Qt の 1 つのバージョンでコンパイルされたプロジェクトを使用しているために発生します。これの主な理由は、Qt がシグナル スロット処理などのグルー コードを作成する moc ツールを使用しているためです。

Moc はヘッダー ファイルを解析して Q_OBJECT、signal:、slot: などの定義を見つけることでこれを行います。

このコードは、このコードの作成に使用された Qt のバージョンに完全に関連付けられています。場合によっては、このコードは、異なるオプション セットで構成された同じバージョンの Qt ライブラリに対しても完全に互換性がありません。

このケースは、.pro の一部の変更にも当てはまります。たとえば、CONFIG += no_keywords を使用すると、moc が異なるグルー コードを生成し、Qt と同じキーワードを使用してシグナル スロット メカニズムを提供する boost などの他のライブラリと Qt が連携できるようになります。

要するに、別の Qt ライブラリに対して Qt プロジェクトをコンパイルする必要があるときはいつでも、必ず次のことを行ってください。 1. run: make distclean 2. run: qmake 3. run: make

これにより、常にクリーンなビルド ツリーが得られます。

于 2011-05-18T10:26:19.320 に答える
0

新しいバージョン(この場合は4.7.3)と対応するヘッダーファイルを使用して、新しいmocを作成してみませんか。

   moc ****.h -o ***.moc
于 2011-05-18T09:50:13.493 に答える