Qt之信号槽机制
来源:互联网 发布:ubuntu 查看cpu核数 编辑:程序博客网 时间:2024/05/17 01:22
对于MFC,我们都知道其主要通过消息映射机制,利用与控件ID的捆绑,映射到相关的回调函数去实现相关的功能。Qt最大的特色就是其信号槽机制,可以把互不相关的对象绑定在一起,从而实现对象之间的通信。
当对象改变其状态时,信号就由该对象发射 (emit) 出去,而且对象只负责发送信号,它不知道另一端是谁在接收这个信号。这样就做到了真正的信息封装,能确保对象被当作一个真正的软件组件来使用。
2)槽
用于接收信号,而且槽只是普通的对象成员函数。一个槽并不知道是否有任何信号与自己相连接。而且对象并不了解具体的通信机制。
3)信号与槽的连接
所有从 QObject 或其子类 ( 例如 Qwidget ) 派生的类都能够包含信号和槽。因为信号与槽的连接是通过 QObject 的 connect() 成员函数来实现的。
当信号发射时,会以不确定的顺序一个接一个的调用各个槽。
2)多个信号可以连接同一个槽
即无论是哪一个信号被发射,都会调用这个槽。
3)信号直接可以相互连接
发射第一个信号时,也会发射第二个信号。
4)连接可以被移除
2)如果一个信号与多个槽相联系的话,那么,当这个信号被发射时,与之相关的槽被激活的顺序将是随机的。
3)宏定义不能用在 signal 和 slot 的参数中。
4)信号和槽的参数个数与类型必须一致。
一、概念
1)信号当对象改变其状态时,信号就由该对象发射 (emit) 出去,而且对象只负责发送信号,它不知道另一端是谁在接收这个信号。这样就做到了真正的信息封装,能确保对象被当作一个真正的软件组件来使用。
2)槽
用于接收信号,而且槽只是普通的对象成员函数。一个槽并不知道是否有任何信号与自己相连接。而且对象并不了解具体的通信机制。
3)信号与槽的连接
所有从 QObject 或其子类 ( 例如 Qwidget ) 派生的类都能够包含信号和槽。因为信号与槽的连接是通过 QObject 的 connect() 成员函数来实现的。
connect(sender,SIGNAL(signal), receiver, SLOT(slot));
其中 sender 与 receiver 是指向对象的指针,SIGNAL() 与 SLOT() 是转换信号与槽的宏。
二、特点
1)一个信号可以连接多个槽当信号发射时,会以不确定的顺序一个接一个的调用各个槽。
2)多个信号可以连接同一个槽
即无论是哪一个信号被发射,都会调用这个槽。
3)信号直接可以相互连接
发射第一个信号时,也会发射第二个信号。
4)连接可以被移除
这种情况比较少用,因为在对象被删除时,Qt会自动移除与这个对象相关的所有连接
三、注意事项
1)信号与槽机制与普通函数的调用一样,如果使用不当的话,在程序执行时也有可能产生死循环。2)如果一个信号与多个槽相联系的话,那么,当这个信号被发射时,与之相关的槽被激活的顺序将是随机的。
3)宏定义不能用在 signal 和 slot 的参数中。
4)信号和槽的参数个数与类型必须一致。
阅读全文
0 0
- Qt之信号槽机制
- QT源码之Qt信号槽机制与事件机制
- Qt编程之信号和槽机制
- Qt入门之信号与槽机制
- Qt入门之信号与槽机制
- Qt入门之信号与槽机制
- Qt入门之信号与槽机制
- Qt入门之信号与槽机制
- QT学习之 信号与槽机制
- Qt入门之信号与槽机制
- Qt之信号与槽机制
- Qt入门之信号与槽机制
- Qt入门之信号与槽机制
- Qt入门之信号与槽机制
- Qt入门之信号与槽机制
- Qt入门之信号与槽机制
- Qt入门之信号与槽机制
- Qt 信号槽机制
- 0728AM jQuery.ajax实现文件上传存在的问题
- Vue 2.0 的变化(一)之基本 API 变化
- [转]DeepLearning(基于caffe)优化策略--Normalization:BN、WN、LN
- Pots
- Xamarin Android读写Contacts联系人
- Qt之信号槽机制
- build.gradle文件详解
- windows pip install MySQL-python
- ie hack
- Mybatis传多个参数(三种解决方案)
- 硬件仿真注意事项
- Android图片加载神器之Fresco,基于各种使用场景的讲解
- 剑指offer题解C++【20】包含min的栈
- RecyclerView