QT中回调函数与槽函数的区别

回调函数是一种通过函数指针调用的机制,用于在不修改他人代码的情况下执行特定操作。信号槽是Qt框架中的概念,它允许对象间通信,当对象状态改变时,其他对象可以通过槽函数响应。信号槽优于回调函数,因为它能更有效地管理对象和内存,且支持多线程中的异步执行。信号和槽函数的参数匹配有一定规则,槽函数可作为普通函数使用,但反之不行。
摘要由CSDN通过智能技术生成

1.什么是回调函数?什么是信号槽?

回调函数是一个函数指针,即指向函数的指针,保存某个执行函数的地址,当其他人写的代码需要执行自己的程序,而又保证其他人的代码不能别修改,此时就产生了回调函数的概念

信号槽函数本质上也是一个回调函数,用于不同对象之间的通信,当某个对象内部的状态发生变化时,其他对象如果需要对其状态变化做出相应,只需要让这个类发出对应状态改变的信号即可,其他对象接收到这个信号以后,调用对应的槽函数进行相应的动作处理

2.各自的区别是什么?

回调函数:当多个类去关注某个类的状态变化时,就需要去维护一张list,以保存多个回调函数的地址,如果被关注的类有多个,就需要维护多张list,效率低下且不够灵活

信号槽函数:能够有效管理继承自QObject类的QT对象,帮助程序员更有效的缓解内存泄漏问题,当应用程序创建了一个具有父部件对象的窗口时,该对象被加入到父窗口的child列表中,当父窗口被销毁时,父窗口中的对象也被一一销毁

另外,在同一线程中,若一个信号对应一个槽函数,则emit信号后,立即执行槽函数,再执行emit后的代码,若一个信号连接多个槽函数,执行槽函数顺序按照连接顺序执行,执行完所有的槽函数以后,再执行emit后面的代码,若在不同的线程中,则槽函数的执行顺序是随机的

最后,信号和槽函数都可以有参数,但并不一定是一一对应的,槽函数的参数类型必须和信号的参数类型一致,信号的参数大于等于槽函数的参数,但槽函数的参数顺序必须与信号函数参数的前几个保持一致,同时,槽函数参数中不能有信号函数参数中不存在的参数,槽函数可以当作普通函数被使用,但普通函数不能被当作槽函数去使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值