1.什么是回调函数?什么是信号槽?
回调函数是一个函数指针,即指向函数的指针,保存某个执行函数的地址,当其他人写的代码需要执行自己的程序,而又保证其他人的代码不能别修改,此时就产生了回调函数的概念
信号槽函数本质上也是一个回调函数,用于不同对象之间的通信,当某个对象内部的状态发生变化时,其他对象如果需要对其状态变化做出相应,只需要让这个类发出对应状态改变的信号即可,其他对象接收到这个信号以后,调用对应的槽函数进行相应的动作处理
2.各自的区别是什么?
回调函数:当多个类去关注某个类的状态变化时,就需要去维护一张list,以保存多个回调函数的地址,如果被关注的类有多个,就需要维护多张list,效率低下且不够灵活
信号槽函数:能够有效管理继承自QObject类的QT对象,帮助程序员更有效的缓解内存泄漏问题,当应用程序创建了一个具有父部件对象的窗口时,该对象被加入到父窗口的child列表中,当父窗口被销毁时,父窗口中的对象也被一一销毁
另外,在同一线程中,若一个信号对应一个槽函数,则emit信号后,立即执行槽函数,再执行emit后的代码,若一个信号连接多个槽函数,执行槽函数顺序按照连接顺序执行,执行完所有的槽函数以后,再执行emit后面的代码,若在不同的线程中,则槽函数的执行顺序是随机的
最后,信号和槽函数都可以有参数,但并不一定是一一对应的,槽函数的参数类型必须和信号的参数类型一致,信号的参数大于等于槽函数的参数,但槽函数的参数顺序必须与信号函数参数的前几个保持一致,同时,槽函数参数中不能有信号函数参数中不存在的参数,槽函数可以当作普通函数被使用,但普通函数不能被当作槽函数去使用