信号和槽用于对象之间的通信。信号和槽机制是Qt的核心机制,也是Qt不同于其他框架的最突出的特征。Qt的元对象系统使信号和槽成为可能。
一.简介
在GUI编程中,当我们改变一个控件,通常希望其他控件被通知到。更一般的,我们希望任意对象之间能够通信。例如,如果我们点击了“关闭”按钮,我们希望窗口的close()函数被调用。
其他工具包使用回调来实现这种通信。回调函数是一个指向函数的指针,所以如果你想要一个处理函数通知你一些事件,你可以将一个指向另一个函数(回调函数)的指针传递给处理函数。处理函数然后在适当的时候调用回调函数。但回调可能不太直观,而且在确保回调参数的类型正确性方面可能会遇到问题。
二.信号和槽
在Qt中,我们有一个回调技术的替代方案:我们使用信号和槽。当特定事件发生时发出信号。Qt的小部件有许多预定义的信号,但是我们总是可以子类化小部件,添加一些自定义信号。槽(slots)是响应特定信号(signals)而调用的函数。Qt的小部件有许多预定义的槽,但是通常的做法是子类化控件并自定义槽函数,这样就可以处理感兴趣的信号。
下图为信号与槽的关系图:支持一对多,多对一
1.信号和槽机制是类型安全的
信号与槽机制要求信号和槽的参数一致,所谓一致,是参数类型一致。如果