Je sais comment ils fonctionnent conceptuellement, mais comment les signaux et les slots sont-ils implémentés dans le framework Qt? Qt Creator les traite comme des mots-clés, mais sont-ils simplement un ensemble de macros, ou un pré-processeur spécial est-il nécessaire avant que ces fichiers source puissent être compilés? En d'autres termes, si j'utilise les fonctionnalités signal/slot de Qt dans mon code, puis-je facilement le compiler sur n'importe quel compilateur C++?Quels sont exactement les signaux et les emplacements dans Qt?
Répondre
De nombreuses fonctionnalités de Qt, y compris les signaux, nécessitent un prétraitement de la source using the Qt Meta-Object Compiler (MOC).
Si vous utilisez la fonction de signaux de Qt, vous pouvez compiler votre code source sur n'importe quel compilateur et plate-forme pris en charge par Qt. Si vous avez besoin de compiler sur une plate-forme non supportée par Qt, vous risquez de ne pas avoir de chance ou tout au moins de faire un travail d'intégration amusant (c'est vrai pour n'importe quelle bibliothèque ou framework, bien sûr).
Si vous recherchez une implémentation de signaux multiplateformes, vous pouvez également envisager Boost.Signals.
Oui, les signaux et les intervalles dans Qt sont implémentés en tant que macros. Cependant, MOC (compilateur d'objets Meta) est utilisé pour l'interpréter. MOC fait partie de Qt.
Si vous souhaitez utiliser des signaux/emplacements dans des projets non Qt, vous pouvez utiliser l'implémentation Boost (http://www.boost.org/doc/libs/1_39_0/doc/html/signals.html).
D'autres implémentations sont répertoriées sur la page wiki: http://en.wikipedia.org/wiki/Signals_and_slots
Vous pouvez utiliser un compilateur prend en charge Qt. Quels sont les plus couramment utilisés, ne savent pas si un compilateur répandu n'est pas supporté. Cependant, le signal/slot/moc n'est pas le facteur limitant ici. Signal/slots nécessite que l'exécutable moc soit appelé sur les fichiers d'en-tête en déclarant QObjects et que le code généré soit compilé et lié. Donc, l'intégration de l'appel moc dans votre système de construction existant pourrait être le plus gros problème. Si vous partez de zéro, je vous suggère d'opter pour qmake, ou cmake.