我知道它们在概念上是如何工作的,但是Qt框架中的信号和插槽是如何实现的? Qt Creator将它们视为关键字,但它们只是一组宏,还是在编译这些源文件之前需要的特殊预处理器?
换句话说,如果我在代码中使用Qt的信号/插槽功能,我可以在任何C ++编译器上轻松编译吗?
答案 0 :(得分:9)
Qt的许多功能,包括信号,都需要预处理源using the Qt Meta-Object Compiler (MOC)。
如果您使用Qt的信号功能,您可以在Qt支持的任何编译器和平台上编译源代码。如果你需要在Qt不支持的平台上编译,你可能会运气不好或者至少是为了很多有趣的集成工作(当然,任何库或框架都是如此)。
如果您正在寻找跨平台信号实施,您可能还会考虑Boost.Signals。
答案 1 :(得分:1)
是的,Qt中的信号和插槽是作为宏实现的。但是,MOC(元对象编译器)用于解释它。 MOC是Qt的一部分。
如果要在非Qt项目中使用信号/插槽,可以使用Boost实现(http://www.boost.org/doc/libs/1_39_0/doc/html/signals.html)。
其他实现在wiki页面上列出:http://en.wikipedia.org/wiki/Signals_and_slots
答案 2 :(得分:1)
您可以使用Qt支持的任何编译器。哪些是最常用的,不知道是否有任何广泛的编译器不支持。但是,信号/ slot / moc不是限制因素。信号/槽需要在头文件上调用moc可执行文件,声明QObjects并生成代码以进行编译和链接。因此,在现有构建系统中集成moc调用可能是最大的问题。如果你从头开始,我建议去qmake或cmake。