蓉华教育嵌入式开发系列:[3]QT的核心机制-信号与槽
作者:蓉华教育
2025-02-17
238次阅读
1、信号与槽概述
信号和槽用于对象之间的通信。信号和槽机制是Qt的核心机制,也是Qt不同于其他框架的最突出的特征。
在Qt中,想要进行对象之间通讯,我们使用信号和槽。当特定事件(点击事件等)发生时发出信号。Qt的控件有许多预定义的信号,但是我们总是可以子类化控件,添加一些自定义信号。槽(slots)是响应特定信(signals)而调用的函数。Qt的控件有许多预定义的槽,但是通常的做法是子类化控件并自定义槽函数,这样就可以处理感兴趣的信号。
信号(signal):
信号是由QObject或其子类的对象发出的消息。它们用于表示某种状态的改变或重要事件的发生。例如,一个按钮被点击,可能会发出一个clicked()信号。信号本身不包含任何的功能实现,而是作为一个通知机制存在。在C++中,它们通常被声明为类的成员函数,但不需要实现。
槽(slot):
槽是用来响应信号的方法。槽可以是任何可调用的代码段,通常是成员函数。当与一个信号相连接时,若该信号被发射,相应的槽就会被调用。槽可以和任何信号连接,只要它们的参数兼容。
信号与槽的连接(connect):
在Qt中,信号和槽之间的连接通常在程序运行时建立,使用QObject::connect()函数
2、系统中的信号与槽
在QT中,主流控件是已经定义好了很多信号的,并且大部分信号都是已经连接了槽函数。但是这个槽函数要么就是接口,要么就是空实现。 我们要实现或者重新完成自己逻辑。比如QPushbutton,只需要通过转到槽,写槽函数.
3、自定义信号与槽
4、信号与槽优缺点
优点: 松散耦合
信号发送者不需要知道发出的信号被哪个对象的槽函数接收,槽函数也不需要知道哪些信号关联了自己,Qt的信号槽机制保证了信号与槽函数的调⽤。⽀持信号槽机制的类或者⽗类必须继承QObject类。
缺点: 效率较低
与回调函数相⽐,信号和槽稍微慢⼀些,因为它们提供了更⾼的灵活性,尽管在实际应⽤程序中差别不⼤。通过信号调⽤的槽函数⽐直接调⽤的速度慢约10倍(这是定位信号的接收对象所需的开销;遍历所有关联;编组/解组传递的参数;多线程时,信号可能需要排队),这种调⽤速度对性能要求不是⾮常⾼的场景是可以忽略的,是可以满⾜绝⼤部分场景。
上一篇:蓉华教育嵌入式开发系列:「4」QT的常用控件系列
下一篇:蓉华教育 | 嵌入式实时操作系统:智能设备的心脏与灵魂