Mon projet Qt est lié à une bibliothèque qui est uniquement linux. Lorsque le projet est exécuté sous Linux, je souhaite qu'un signal soit déclenché sur un événement en utilisant un type défini dans cette bibliothèque. Une complication que j'ai, cependant, est que le projet doit également construire dans Windows. Évidemment, ce signal et l'emplacement qui l'attrape n'existeraient pas dans Windows, et c'est bien. Je suis, cependant, trouver des problèmes avec l'outil moc de Qt ne parvenant pas à reconnaître l'existence d'un #ifdef __linux__
autour du code qui émet le signal. Mon code ressemble à ceci:Signal Qt enveloppé dans un ifdef
[SomeFile.h]
#ifdef __linux__
signals:
void SomeSignal(SomeTypeDefinedInTheLinuxLibrary);
#endif
[SomeFile.cpp]
#ifdef __linux__
emit SomeSignal(someObject);
#endif
Lorsque je tente de compiler cela avec g ++, je reçois l'erreur: SomeFile.cpp:(.text+0x858c): undefined reference to SomeFile::SomeSignal(SomeTypeDefinedInTheLinuxLibrary)
Des idées pour obtenir moc et #ifdefs pour bien jouer ensemble?
J'aimerais pouvoir le faire, mais le type de paramètre associé au signal est défini par la bibliothèque spécifique à Linux. Si je devais essayer de construire sous Windows avec le signal non commenté, il serait erreur avec un type indéfini. –
@Dave: Enveloppez le type ou utilisez '#ifndef __linux__' et définissez votre propre type factice pour qu'il soit compilé sous Windows. –
Merci pour votre contribution. J'ai fini par emballer le type et l'ai mis au travail. Il semble toujours que le code généré par le moc doit respecter le #ifdefs dans lequel se trouve le code du signal/slot. –