2010-06-06 91 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。