QT的signal和slot的理解

来源:互联网 发布:java博客园 编辑:程序博客网 时间:2024/06/10 02:54

    我们知道标准c++中的消息机制是静态的,也就是说发送消息的对象必须明确知道接收对象(或其基类),这个导致和当前的动态消息的事件驱动型的系统不吻合,所以往往要强制去做这种转换。

   比如MFC里的消息映射机制就是为了解决静态消息的C++和动态消息的windows系统之间的矛盾而诞生的。

   QT中的signal和slot机制,也是这个目的。所有从QObject派生的类都可以包含signal和slot。signal相当于定义了该对象(类)能产生哪种事件(比如可以被click,可以resize等),而不必关心谁去响应它。传统的c++则没办法实现这个,普通对象(类)中的函数只是表示该类具有什么能力(能完成什么任务)。slot相当于定义了该对象(类)可以被回调。这在传统c++中需要用实现回调接口来实现(实现回调接口中的虚函数)。而QT中用了简单的slot语法就可以实现回调接口所完成的任务。 传统c++中从事件到响应需要用到c++的函数调用和回调。但是在QT中只要一个connect就可以关联其消息源和消息目标。

   可见QT中这一个小小的改动,其实是对C++消息机制的巨大改进。

   我们再明确一个原则,消息往往是由底层向高层发送的。比如windows中的鼠标点击事件:消息是从硬件中断-->OS-->应用程序framework-->应用程序--->具体的对象(窗口处理)。 从左到右是逐级升高的。

原创粉丝点击