Mein Qt-Projekt ist mit einer Bibliothek verbunden, die nur Linux verwendet. Wenn das Projekt unter Linux ausgeführt wird, möchte ich ein Signal für ein Ereignis auslösen, das einen in dieser Bibliothek definierten Typ verwendet. Eine Komplikation, die ich habe, ist, dass das Projekt auch in Windows bauen muss. Offensichtlich würden dieses Signal und der Slot, der es abfängt, in Windows nicht existieren, und das ist in Ordnung. Ich finde jedoch Probleme mit Qt Moc-Tool nicht erkennen, die Existenz eines #ifdef __linux__
um den Code, der das Signal ausgibt. Mein Code sieht wie folgt aus:Qt-Signal in einem ifdef eingepackt
[SomeFile.h]
#ifdef __linux__
signals:
void SomeSignal(SomeTypeDefinedInTheLinuxLibrary);
#endif
[SomeFile.cpp]
#ifdef __linux__
emit SomeSignal(someObject);
#endif
Wenn ich versuche, dies zu kompilieren mit g ++, erhalte ich die Fehlermeldung: SomeFile.cpp:(.text+0x858c): undefined reference to SomeFile::SomeSignal(SomeTypeDefinedInTheLinuxLibrary)
Irgendwelche Ideen, wie man moc und #ifdefs gut zusammen spielen kann?
Ich wünschte, ich könnte das tun, aber der Typ des Parameters mit dem Signal verbunden ist durch die Linux-spezifische Bibliothek definiert. Wenn ich versuchen würde, unter Windows zu bauen, wobei das Signal nicht auskommentiert ist, würde es einen Fehler mit einem undefinierten Typ geben. –
@Dave: Wickeln Sie den Typ oder verwenden Sie '#ifndef __linux__' und definieren Sie dort Ihren eigenen Dummy-Typ, damit er unter Windows kompiliert werden kann. –
Danke für Ihre Eingabe. Ich endete damit, den Typ zu verpacken und es zur Arbeit zu bringen. Es scheint immer noch so, als ob der Code, der vom Moc erzeugt wird, die #ifdefs respektiert, in der der Signal/Slot-Code liegt. –