我的Qt項目鏈接到僅限linux的庫。當項目在linux下運行時,我希望使用該庫中定義的類型在事件上觸發信號。然而,我所遇到的一個複雜情況是,該項目也必須在Windows中構建。顯然,這個信號和插槽捕捉它不會在Windows中存在,這很好。但是,我發現Qt的moc工具無法識別發出信號的代碼周圍是否存在#ifdef __linux__
。我的代碼如下所示:封裝在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專用庫定義的。如果我試圖在信號未被註釋掉的情況下在窗口下構建,那麼會出現未定義類型的錯誤。 – 2010-11-22 14:56:08