Qt 信号和槽机制的优点(区别于回调函数)
https://blog.csdn.net/m0_37806112/article/details/83933268
定义:
Qt使用信号与槽机制进行对象间的通信,当某个对象的状态发生变化时,该对象会触发一个信号,该信号和另外一些对象的槽函数绑定,信号的触发将导致执行这些槽函数,这些槽函数将处理第一个对象状态的变化,完成对象之间的通信。
分析:
为什么Qt使用信号与槽机制而不是传统的回调函数机制进行对象间的通信呢?
① 回调函数的本质是“你想让别人的代码执行你的代码,而别人的代码你又不能动”这种需求下产生的。
回调函数是函数指针的一种用法,如果多个类都关注某个类的状态变化,此时需要维护一个列表,以存放多个回调函数的地址。对于每一个被关注的类,都需要做类似的工作,因此这种做法效率低,不灵活。
回调函数的栗子:
1 #include <stdio.h>
2
3 void printWelcome(int len)
4 {
5 printf("欢迎欢迎 -- %d/n", len);
6 }
7 void printGoodbye(int len)
8 {
9 printf("送客送客 -- %d/n", len);
10 }
11 void callback(int times, void(*print)(int))
12 {
13 int i;
14 for (i = 0; i < times; ++i)
15 {
16 print(i);
17 }
18 printf("/n我不知道你是迎客还是送客!/n/n");
19 }
20
21 void main(void)
22 {
23 callback(2, printWelcome);
24 callback(2, printGoodbye);
25 }
②Qt使用信号与槽机制来解决这个问题,程序员只需要指定一个类含有哪些信号函数、哪些槽函数,Qt会处理信号函数和槽函数之间的绑定。当信号函数被调用时,Qt会找到并执行与其绑定的槽函数。允许一个信号函数和多个槽函数绑定,Qt会依次找到并执行与一个信号函数绑定的所有槽函数,这种处理方式更灵活。
③Qt信号与槽机制降低了Qt对象的耦合度。
激发信号的Qt对象无须知道是哪个对象的哪个槽需要接收它发出的信号,它只需要做的是在适当的时间发送适当的信号就可以了,而不需要知道也不关心它的信号有没有被接收到,更不需要知道哪个对象的哪个槽接收到了信号。
同样地,对象的槽也不知道是哪些信号关联了自己,而一旦关联信号和槽,Qt就保证了适合的槽得到了调用。即使关联的对象在运行时被删除。应用程序也不会崩溃。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」