Что происходит, если один и тот же сигнал и слот подключены дважды?
Как работает механизм?
Несколько недель назад у нас был стажер, который несколько раз случайно подключил сигнал к слоту. Идея заключалась в том, что при одном условии у вас будет слот, подключенный к сигналу, а при другом условии вы отключите его. Когда вы меняли режимы, вы делали соответствующую работу.
Ну, он забыл отключиться, когда это было необходимо. Таким образом, каждый раз, когда вы меняли режимы, у вас было новое подключение к слоту.
Конечный результат? 1 соединение == 1 вызов в слот. 2 соединения == 2 вызова на слот. 3 соединения == 3 вызова слота и т. Д. Эти вызовы произошли «одновременно» (я знаю, что на самом деле это не так, поскольку они находятся в одном потоке событий, но я имею в виду, что все вызовы обрабатывались последовательно).
Как отмечает @Job в одном из своих комментариев (он заслуживает похвалы, поэтому, пожалуйста, не голосуйте за меня за его работу), Qt :: UniqueConnection
предотвратит эту проблему.
Обычно плохие вещи. Вполне допустимо подключать слот дважды или даже больше, но при срабатывании сигнала ваш слот будет вызываться для каждого установленного вами подключения, что, вероятно, не то, что вам нужно.
Обратите внимание, что наличие нескольких соединений не обязательно является неправильным. Есть (вероятно) вполне допустимые варианты использования. Они довольно редки, я, конечно, не могу вспомнить, чтобы когда-нибудь использовал их как функцию. Все ситуации, которые я могу вспомнить, когда было множественное соединение, оказались ошибкой, а не намеренно.
Слот выполняется несколько раз (как уже говорили другие).
Еще несколько примечаний: