Qt信号槽连接没反应

原因

我设计如下:

信号槽
信号槽
子子线程
子线程
主线程

问题在子子线程发送给子线程信号时,子线程槽函数没有接受到。再看了一些博客,突然有一些谈到如果事件如果没有归还到槽函数所在的线程,或者线程消息循环一直忙处于阻塞状态的话,那它是接收不到外界的信息。然后我把子线程消息循环屏蔽掉,发现子线程槽函数是能接收到信号的。基于设计发现子线程消息循环是不能 取消的,就修改了连接方式结果发现是可行的。

写这篇博客原因呢,是因为我在程序中遇到过这个问题,参考了多篇博客,个人总结如下几点,并引用如下两篇
博客
博客

总结如下几点:
  1. Qt 信号槽连接可能参数不对应,或者参数是自定义的没注册导致不能识别。
  2. Qt槽连接方式导致引起,主要是直接连接与队列连接区别(参数是否需要将信号的参数塞到信号队列里)。
  3. 对应的槽所在的线程一直处于繁忙中(忙于自己的消息事件队列,无法接收到外部事件,信号槽等)。
扩展

琢磨Qt线程如何触发finished信号,Qt文档如下说明:

This signal is emitted from the associated thread right before it finishes executing.

如何才知道线程结束执行呢?

  1. 对于继承自QThread子类说,如果不默认写虚函数run,调用quit,是能退出事件循环,触发finished信号的。如果有自己的实现run函数,如果有exc() 消息循环,quit可以退出消息循环,否你调用quit是没啥作用的,除非使用return退出函数才能触发finished()
  2. 对于使用movetoThread(),使用所关联的线程.quit(),是能很好的退出并触发finished信号的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道阻且长,行则降至

无聊,打赏求刺激而已

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值