企业网站 联系我们,科技 网站建设,wordpress主题不显示图片,廊坊市建设网站一. 简介 就我个人来理解#xff0c;信号槽机制与Windows下消息机制类似#xff0c;消息机制是基于回调函数#xff0c;Qt中用信号与槽来代替函数指针#xff0c;使程序更安全简洁。
信号和槽机制是 Qt 的核心机制#xff0c;可以让编程人员将互不相关的对象绑定在一起信号槽机制与Windows下消息机制类似消息机制是基于回调函数Qt中用信号与槽来代替函数指针使程序更安全简洁。
信号和槽机制是 Qt 的核心机制可以让编程人员将互不相关的对象绑定在一起实现对象之间的通信。
信号
当对象改变其状态时信号就由该对象发射 (emit) 出去而且对象只负责发送信号它不知道另一端是谁在接收这个信号。这样就做到了真正的信息封装能确保对象被当作一个真正的软件组件来使用。
槽
用于接收信号而且槽只是普通的对象成员函数。一个槽并不知道是否有任何信号与自己相连接。而且对象并不了解具体的通信机制。
信号与槽的连接
所有从 QObject 或其子类 ( 例如 Qwidget ) 派生的类都能够包含信号和槽。因为信号与槽的连接是通过 QObject 的 connect() 成员函数来实现的。
connect(sender, SIGNAL(signal), receiver, SLOT(slot)); 其中 sender 与 receiver 是指向对象的指针SIGNAL() 与 SLOT() 是转换信号与槽的宏。
二. 特点 一个信号可以连接多个槽
当信号发射时会以不确定的顺序一个接一个的调用各个槽。
多个信号可以连接同一个槽
即无论是哪一个信号被发射都会调用这个槽。
信号直接可以相互连接
发射第一个信号时也会发射第二个信号。
连接可以被移除
这种情况用得比较少因为在对象被删除时Qt会自动移除与这个对象相关的所有连接。语法如下
disconnect(sender, SIGNAL(signal), receiver, SLOT(slot)); 三. 应注意的问题 信号与槽机制与普通函数的调用一样如果使用不当的话在程序执行时也有可能产生死循环。因此在定义槽函数时一定要注意避免间接形成无限循环即在槽中再次发射所接收到的同样信号。例如 , 在前面给出的例子中如果在 mySlot() 槽函数中加上语句 emit mySignal() 即可形成死循环。 如果一个信号与多个槽相联系的话那么当这个信号被发射时与之相关的槽被激活的顺序将是随机的。 宏定义不能用在 signal 和 slot 的参数中。 信号和槽的参数个数与类型必须一致。 四. 程序举例 这个demo程序由一个Label和PushButton组成第一个例子中点击按钮可以让label关闭这是最简单的信号与槽的连接第二例子中点击按钮在label上获取当前系统时间这个涉及到的知识点有信号与槽的参数类型不同时如何连接、自定义槽函数、自定义信号。首先新建一个Qt GUI程序父窗口选为QDialog类名为getTime在头文件和CPP文件分别加入如下代码小生愚钝还没弄清楚博客园MarkDown代码块怎么高亮所以只好贴截图了见谅