一、前言:
不管在PyQt还是Qt开发中,信号和槽都是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重要地方。
在我们所熟知的很多 GUI 工具包中,窗口小部件 (widget) 都有一个回调函数用于响应它们能触发的每个动作,这个回调函数通常是一个指向某个函数的指针。但是,在 QT 中信号和槽取代了这些凌乱的函数指针,使得我们编写这些通信程序更为简洁明了。
所有从 QObject 或其子类 ( 例如 Qwidget) 派生的类都能够包含信号和槽。当对象改变其状态时,信号就由该对象发射 (emit) 出去,这就是对象所要做的全部事情,其不需要知道有没有人接收它发出去的信息。
槽用于接收信号,但它们是普通的对象成员函数。一个槽并不知道是否有任何信号与自己相连接。而且,对象并不需要了解具体的通信机制。
单个的槽可以和很多信号进行连接,同样,单个的信号与很多的槽进行连接,甚至于将一个信号与另外一个信号相连接也是可能的,这时无论第一个信号什么时候发射系统都将立刻发射第二个信号。总之,信号与槽构造了一个强大的部件编程机制。
二、知识补充
在学习信号与槽相关的知识之前,我们先学习一些相关的名次和逻辑
信号与槽通信过程中涉及到:信号(Signal)、槽(slot)、连接(connect)、动作事件(action)、发射(emit)、发送者、接受者。
三、自定义信号与槽
有关信号与槽的使用我们就不多说了,在之前的案例说我们已经开始使用,本次我们说说如何自定义信号与槽呢?
自定义信号的一般流程如下:1、定义信号
2、定