1、信号和槽的机制概述
信号和槽用于两个对象之间的通信。信号和槽机制是Qt的核心特征,也是Qt不同于其它开发框架的最突出特征。在GUI编程中,当改变了一个部件时,总希望也了解到该变化。更一般来说,我们希望任何对象都可以和其它对象进行通信。例如,用户单击了关闭按钮,则希望可以执行窗口的close()函数来关闭窗口。为了实现对象间的通信,一些工具包中使用了回调(callback)机制,而在Qt中使用了信号和槽来进行对象间通信。当一个特殊的事情发生时便可以发射一个信号,比如按钮被单击就发射clicked()信号;而槽就是一个函数,它在信号发射后被调用来响应这个信号。Qt的部件类中已经定义了一些信号和槽,但是更常用的做法是子类化部件,然后添加自定义的信号和槽来实现想要的功能。
回调就是指向函数的指针,把这个指针传递给要被处理的函数,那么就可以在这个函数被处理时在适当的地方调用这个函数。回调机制主要有两个缺陷:第一,不是类型安全的(type safe),不能保证在调用回调函数时可以使用正确的参数;第二,是强耦合的。处理必须知道调用哪个回调函数。
前面使用过的信号和槽的关联都是一个信号和一个槽。其实,一个信号可以关联到多个槽上,多个信号也可以关联到一个槽上,甚至,一个信号可以关联到另一个信号上。如果存在多个槽与某个信号相关联,那么,当这个信号被发射时,这些槽将会一个接一个地执行,执行顺序与关联顺序相同。