转自:http://www.hellotongtong.com/Qt5base1/qtsignalslot-intro.html
3.1 Qt信号槽概念原理讲解
***【免费下载源码和PPT课件】***
***【在线视频课程(csdn)】***
***【在线视频课程(51cto)】***
3.1 Qt信号槽概念原理讲解
信号槽机制
信号槽是 Qt 框架引以为豪的机制之一。
信号槽机制与Windows下消息机制类似,消息机制是基于回调函数,Qt中用信号与槽来代替函数指针,使程序更安全简洁。信号和槽机制是 Qt 的核心机制,可以让编程人员将互不相关的对象绑定在一起,实现对象之间的通信
所谓信号槽机制,实际就是观察者模式。
当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,意思是,将想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号。
也就是说,当信号发出时,被连接的槽函数会自动被回调。这就类似观察者模式:当发生了感兴趣的事件,某一个操作就会被自动触发。(这里提一句,Qt 的信号槽使用了额外的处理来实现,并不是 GoF 经典的观察者模式的实现方式。)
信号和槽是Qt特有的信息传输机制,是Qt设计程序的重要基础,它可以让互不干扰的对象建立一种联系。
信号与槽(Signal & Slot)是 Qt 编程的基础,也是 Qt 的一大创新。
因为有了信号与槽的编程机制,在 Qt 中处理界面各个组件的交互操作时变得更加直观和简单。
信号是什么
信号(Signal)就是在特定情况下被发射的事件,例如PushButton 最常见的信号就是鼠标单击时发射的 clicked() 信号。
信号:当对象改变其状态时,信号就由该对象发射 (emit) 出去,而且对象只负责发送信号,它不知道另一端是谁在接收这个信号,这样就实现了“松耦合”。这样就做到了真正的信息封装,能确保对象被当作一个真正的软件组件来使用。
GUI 程序设计的主要内容就是对界面上各组件的信号的响应,只需要知道什么情况下发射哪些信号,合理地去响应和处理这些信号就可以了。
槽是什么
槽用于接收信号,而且槽只是普通的对象成员函数。
一个槽并不知道是否有任何信号与自己相连接。
槽的本质是类的成员函数,其参数可以是任意类型的。
和普通C++成员函数几乎没有区别,它可以是虚函数;也可以被重载;可以是公有的、保护的、私有的、也可以被其他C++成员函数调用。
唯一区别的是:槽可以与信号连接在一起,每当和槽连接的信号被发射的时候,就会调用这个槽。
信号与槽的关联
信号与槽关联是用 QObject::connect() 函数实现的,其基本格式是:
QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));
sender和receiver是对象的指针,SIGNAL和SLOT后是信号和槽相应的函数
好文章,来自【福优学苑@音视频+流媒体】
***【免费下载源码和PPT课件】***
***【在线视频课程(csdn)】***
***【在线视频课程(51cto)】***