国外一篇关于信号槽的文章“ A deeper look at signals and slots” ,分析的很好,值得一看。原文地址:
http://www.elpauer.org/?p=255
有 pdf 文件: http://www.elpauer.org/stuff/a_deeper_look_at_signals_and_slots.pdf
另外,在豆子空间 http://devbean.blog.51cto.com 有中文翻译,共 4 篇文章
深入理解信号槽(一) http://devbean.blog.51cto.com/448512/417658
深入理解信号槽(二) http://devbean.blog.51cto.com/448512/424778
深入理解信号槽(三) http://devbean.blog.51cto.com/448512/426999
深入理解信号槽(四) http://devbean.blog.51cto.com/448512/428364
摘录关键性总结:
信号和槽的机制实际上是观察者模式的一种变形。它是面向组件编程的一种很强大的工具。现在,信号槽机制已经成为计算机科学的一种术语,也有很多种不同的实现。
Qt 信号槽是 Qt 整个架构的基础之一,因此它同 Qt 提供的组件、线程、反射机制、脚本、元对象机制以及可视化 IDE 等等紧密地集成在一起。 Qt 的信号是对象的成员函数,所以,只有拥有信号的对象才能发出信号。 Qt 的组件和连接可以由非代码形式的资源文件给出,并且能够在运行时动态建立这种连接。 Qt 的信号槽实现建立在 Qt 元对象机制之上。 Qt 元对象机制由 Qt 提供的 moc 工具实现。 moc 也就是元对象编译器,它能够将用户指定的具有 Q_OBJECT 宏的类进行一定程度的预处理,给这个增加元对象能力。
Boost.Signals 是具有静态的类型安全检查的,基于模板的信号槽系统的实现。所有的信号都是模板类 boost::signal 的一个特化;所有的槽函数都具有相匹配的可调用的签名。 Boost.Signals 是独立的,不需要内省、元对象系统,或者其他外部工具的支持。然而, Boost.Signals 没有从资源文件动态建立连接的能力。
这两种实现都非常漂亮,并且都具有工业强度。将它们结合在一起使用也不是不可能的,Qt 4.1 即提供了这种可能性。
任何基于 Qt GUI 的系统都会自然而然的使用信号槽。你可以从中获取很大的好处。任何大型的系统,如果希望能够降低组件之间的耦合程度,都应该借鉴这种思想。正如其他的机制和技术一样,最重要的是把握一个度。在正确的地方使用信号槽,可以让你的系统更易于理解、更灵活、高度可重用,并且你的工作也会完成得更快。