【发布时间】:2011-04-01 15:06:57
【问题描述】:
如果相同的信号和插槽连接两次会发生什么?
机制是如何处理的?
【问题讨论】:
标签: qt signals-slots
如果相同的信号和插槽连接两次会发生什么?
机制是如何处理的?
【问题讨论】:
标签: qt signals-slots
几周前,我们有一个实习生不小心将一个信号连接到一个插槽不止一次。这个想法是,在一种情况下,您将插槽连接到信号,而在另一种情况下,您将断开它。当你改变模式时,你会做适当的工作。
好吧,他忘了在适当的时候断开连接。因此,每次您更改模式时,都会与插槽建立新的连接。
最终结果? 1 次连接 == 1 次调用插槽。 2 个连接 == 2 个插槽调用。 3 个连接 == 3 个对插槽的调用,等等。这些调用“同时”发生(我知道实际上它们没有发生,因为它们在同一个事件线程上,但我的意思是所有调用都是连续处理的)。
正如@Job 在他的一个 cmets 中指出的那样(他值得称赞,所以请不要为他的工作投票给我),Qt::UniqueConnection 将阻止这个问题。
【讨论】:
Qt::UniqueConnection。
槽被多次执行(正如其他人已经说过的那样)。
还有一些注意事项:
【讨论】:
Qt::UniqueConnection 用于修补草率的非对称代码的次数可能比用于任何其他目的的次数要多。
通常是坏事。将插槽连接两次甚至更多次是完全可以接受的,但是当信号被触发时,您的插槽将被调用为您建立的每个连接,这可能不是您想要的。
请注意,拥有多个连接不一定是错误的。它有(可能)完全有效的用途。它们非常罕见,我当然想不出任何时候我将它用作功能。我能回忆起的所有存在多重连接的情况都证明是错误而不是预期。
【讨论】: