我知道它们的概念,但Qt框架中的信号和槽是如何实现的?Qt Creator将它们视为关键字,但它们只是一组宏,还是需要特殊的预处理器才能编译这些源文件?换句话说,如果我在我的代码中使用Qt的信号/槽功能,我能否在任何C++编译器上轻松编译它?
许多Qt的功能,包括信号,需要预处理源代码使用Qt元对象编译器(MOC)。如果您使用Qt的信号功能,则可以在任何受Qt支持的编译器和平台上编译源代码。如果您需要在Qt不支持的平台上进行编译,则可能会遇到困难或至少需要大量集成工作(当然,这也适用于任何库或框架)。如果您正在寻找跨平台信号实现,您还可以考虑Boost.Signals。
是的,Qt中的信号和槽是作为宏实现的。但是会使用元对象编译器(MOC)进行解释。MOC是Qt的一部分。如果您想在非Qt项目中使用信号/槽,可以使用Boost实现(http://www.boost.org/doc/libs/1_39_0/doc/html/signals.html)。其他实现方式列在维基页面上:http://en.wikipedia.org/wiki/Signals_and_slots。
你可以使用Qt支持的任何编译器。其中最常用的编译器不知道是否有任何普及的编译器不受支持。然而,信号/插槽/moc在这里不是限制因素。 信号/槽需要调用moc可执行文件来处理声明QObjects的头文件并编译和链接生成的代码。因此,在现有构建系统中集成moc调用可能是最大的问题。如果您从头开始,请选择qmake或cmake。