2010-06-06 70 views
4

我知道他们在概念上是如何工作的,但Qt框架中的信号和插槽是如何实现的? Qt Creator将它们视为关键字,但是它们只是一组宏,还是在这些源文件可以编译之前需要特殊的预处理器?换句话说,如果我在代码中使用Qt的信号/插槽特性,我可以在任何C++编译器上轻松编译它吗?Qt中的信号和插槽究竟是什么?

回答

9

Qt的许多功能,包括信号,都需要预处理源using the Qt Meta-Object Compiler (MOC)

如果您使用Qt的信号功能,您可以在Qt支持的任何编译器和平台上编译您的源代码。如果你需要在Qt不支持的平台上进行编译,那么你可能会走运,或者至少在很多有趣的集成工作中(当然这对于任何库或框架都是如此)。

如果您正在寻找跨平台信号实施,您可能还会考虑Boost.Signals

1

你可以使用任何编译Qt支持。哪些是最常用的,不知道是否有任何广泛的编译器不支持。然而,这里信号/时隙/ moc不是限制因素。信号/插槽需要在声明QObject的头文件和要编译和链接的生成代码上调用moc可执行文件。因此,将moc调用集成到您现有的构建系统中可能是最大的问题。如果你从头开始,我会建议去找qmake或者cmake。