关于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 @ 2023-04-03 11:15  愿得入睡  阅读(136)  评论(0)    收藏  举报