关于Qt 信号和槽的连接方式

当一个信号连接多个槽时,信号发送时会,所有槽都会被调用。

而断开连接则会从连接中删除指定的信号与槽的对应关系,该槽函数将不再接收来自信号的任何消息,直到它重新连接到信号。

当一个 connect() 方法以 QQueuedConnection 连接不同线程的信号和槽时,如果线程被 disconnect,则信号和槽之间的连接不会被立即断开,而是会被放入一个队列中,直到线程重新连接。在此期间,信号会被阻塞,而不是被丢弃。

 

 

在不同线程中使用信号和槽时,使用Qt::BlockingQueuedConnection 不同线程的信号和多个槽时。

可以在:

disconnect(sender, SIGNAL(signal()), receiver, SLOT(slot1()));
之后 阻止槽函数 slot1() 接收信号
receiver->blockSignals(true);
但也会阻止这个QObject 对象上的所有槽函数接收信号
当需要再次连接时,在允许接收信号receiver->blockSignals(false);
connect(sender, SIGNAL(signal()), receiver, SLOT(slot1()), Qt::BlockingQueuedConnection);
 
posted @   愿得入睡  阅读(115)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示