Qt的引以为豪核心机制——信号与槽
扫描二维码
随时随地手机看文章
信号与槽概述信号槽是 Qt 框架引以为豪的机制之一。所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,意思是,将想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号。也就是说,当信号发出时,被连接的槽函数会自动被回调。这就类似观察者模式:当发生了感兴趣的事件,某一个操作就会被自动触发。
信号和槽是Qt特有的信息传输机制,是Qt设计程序的重要基础,它可以让互不干扰的对象建立一种联系。
槽的本质是类的成员函数,其参数可以是任意类型的。和普通C 成员函数几乎没有区别,它可以是虚函数;也可以被重载;可以是公有的、保护的、私有的、也可以被其他C 成员函数调用。唯一区别的是:槽可以与信号连接在一起,每当和槽连接的信号被发射的时候,就会调用这个槽。
02
信号的本质信号(Signal)就是在特定情况下被发射的事件,比如:
-
单击、双击按钮
-
改变窗口大小
-
鼠标操作
-
按键
-
...
举个简单的例子理解一下信号:比如说你现在没钱了,你在家庭群里发了个消息"没钱了,给我来点钱呗"
这里你发的消息就相当于Qt里的信号,那么对于你的这个消息,可能没人鸟你,也可能你爸、妈都给你救济金。
槽的本质在Qt中槽函数是一类特殊的功能的函数,在编码过程中也可以作为类的普通成员函数来使用。之所以称之为槽函数是因为它们还有一个职责就是对Qt框架中产生的信号进行处理。
上面的例子中,如果没有人鸟你,那么你的信号就没人处理,如果收到了救济金,就说明你的信号被处理了04
信号和槽的关系在Qt中信号和槽函数都是独立的个体,本身没有任何联系,但是由于某种特性需求我们可以将二者连接到一起。在Qt中我们需要使用QOjbect类中的connect函数进二者的关联。
connect()函数原型如下: