My Qtプロジェクトは、Linux専用のライブラリにリンクしています。プロジェクトがlinuxで実行されている場合、そのライブラリで定義されている型を使用してイベントでシグナルを発生させたいと考えています。しかし、私が持っている複雑なことは、プロジェクトもWindowsで構築する必要があるということです。明らかに、このシグナルとそれを捕まえるスロットはWindowsでは存在しません。それは問題ありません。しかし、私はQtのmocツールが信号を発信するコードの周りに#ifdef __linux__
の存在を認識できないという問題を発見しています。私は、G ++でこれをコンパイルしようとするとifdefで包まれたQtシグナル
[SomeFile.h]
#ifdef __linux__
signals:
void SomeSignal(SomeTypeDefinedInTheLinuxLibrary);
#endif
[SomeFile.cpp]
#ifdef __linux__
emit SomeSignal(someObject);
#endif
、私はエラーを取得: SomeFile.cpp:(.text+0x858c): undefined reference to SomeFile::SomeSignal(SomeTypeDefinedInTheLinuxLibrary)
私のコードは次のようになります
どのようにmocと#ifdefsをうまく組み合わせるにはどうすればいいですか?
私はそれを行うことができますが、信号に関連するパラメータのタイプはLinux固有のライブラリによって定義されています。コメントアウトされていない信号でウィンドウを構築しようとすると、定義されていないタイプのエラーになります。 –
@Dave:タイプをラップするか、 '#ifndef __linux__'を使用してそこに独自のダミータイプを定義し、Windows上でコンパイルします。 –
入力いただきありがとうございます。私はタイプをラップして終了し、それを動作させました。それでも、mocによって生成されたコードは、シグナル/スロットコードがある#ifdefsを尊重する必要があります。 –