信号和槽机制是Qt的一大特征,信号和槽用于对象间的通讯。简单地说就是A函数发出一个Signal,此时B函数作为这个Signal的Slot被调用。
一直很不理解,A为什么不直接调用B,那样企不是更简单明了,中间用到Signal and Slot机制不是多此一举。事实的确如此,这种机制需要发射信号、定位连接对像,比直接调用函数慢地多。
但是存在总是有理由的,
在网上搜了Qt的优势:
大多都是说“与回调相比,它具有2个优点:1.类型安全;2.信号与槽的连接是松散的。”
听不懂他们在讲什么,就像专家一样,讲出来大家不懂的话才算有水平。
我水平有限,就只能用通俗的话来表达了,Qt的优势在什么地方?
自从程序设计使用分层的思想以来,特别是在一些大的工程中,高质量的代码会表现地等级森严(层次间的关连性很小),在样在代码的移植、管理和维护中有很大的好处。
在人类社会一样中,分派任务时,级别相同的好说话,上级分派给下级更好说话,但下级分给上级任务可想而知会有什么后果,我们的统治阶层是不允许这种事的发生。分层思想中,函数调用也是如此,上层可以调用下层和同一层的函数,下层函数不可以调用上层函数,否则程序的层次性会被打破,导致结构错综复杂,难以维护和管理。
下层有事情需要禀报的时候怎么办?上层会设立一个机构,也就是一个函数,用无限循环来查询下层的状态,如果下层真的有事情,这个机构就把这消息拿到上一层来处理。这种处理方式显得有些复杂,我们想要的简单明了的方式是,如果下层有事件发生,可以直接“调用”上层函数处理。
说了这么多其实就是想说,信号和槽的最大优势在于,它完善了程序分层的思想,它可以在不改变程序的层次性的情况下,完成由下层到上层的“调用”。在下层发出一个Signal,这时上层与其想关联的Slot函数就会响应。