Qt笔记- 信号槽自动绑定函数QMetaObject::connectSlotsByName()测试结果

说明 

        通过创建多个类建立parent-child关系,对信号槽自动绑定函数QMetaObject::connectSlotsByName()进行了测试,现将测试结果公布如下。

测试结果

        创建以下四个类对象

         测试结果: QMetaObject::connectSlotsByName(A)调用会对对象A中的所有槽进行尝试绑定,信号源为this(包括)以下的所有的直接child和间接child。

问题解析

  1. 绑定是否针对A之下的parent-child体系中的所有槽?答:不是,仅针对对象A中的槽。
  2. 绑定是否针对A之下的parent-child体系中的所有信号?答:是,且包括自定义信号。
  3. B中的槽有无可能被C中的信号连接?答:没有可能,参考1。
  4. B中的槽有无可能被D中的信号连接?答:没有可能,参考1。
  5. D中的信号可以连接到A中的槽吗?答:可以。
  6. ObjectName()相同、信号名称及形参也相同的信号,是否会全部绑定在符合条件的槽上?答:不会,仅绑定这些信号所属的对象中第一个被构造的。
  7. D对象构造在A中或B中或其它位置,影响绑定吗?答:不影响。
  8. 两次重复调用QMetaObject::connectSlotsByName(A)会怎样?答:会出现发送一次信号,A中被连接的槽被连续调用两次的情况。
  9. 如果通过函数自动将D中的信号绑定到了A中,之后对B调用setParent(0),D与A的信号槽连接是否会断开?答:不会。parent-child关系仅对绑定之时有关,对于绑定之后只要信号和槽所属的对象仍存在,连接就不会断开。
  10. 如果通过函数自动将D中的信号绑定到了A中,之后delete B,D与A的信号槽连接是否会断开?答:会。由Qt对象释放规则可知,D是B的child,D会随B一起被delete掉。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值