当一个信号连接多个槽时,信号发送时会,所有槽都会被调用。
而断开连接则会从连接中删除指定的信号与槽的对应关系,该槽函数将不再接收来自信号的任何消息,直到它重新连接到信号。
当一个 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);
标签:Qt,线程,信号,receiver,slot1,连接
From: https://www.cnblogs.com/wish-sleeping/p/17282558.html