首页 文章

Qt信号和插槽连接两次......会发生什么?

提问于
浏览
45

如果相同的信号和插槽连接两次会发生什么?

该机制是如何处理的?

3 回答

  • 6

    插槽被执行多次(正如其他人已经说过的那样) .

    还有一些说明:

    • 以前,在之前可能存在连接的情况下,"connect exactly once"的模式是首先调用disconnect,然后连接以强制执行一个连接 .

    • 现在,从4.6开始,还有更优雅的Qt :: UniqueConnection,参见http://doc.qt.io/qt-5/qt.html#ConnectionType-enum

  • 47

    几个星期前,我们有一个实习生不小心将一个信号连接到一个插槽 . 这个想法是,在一个条件下,你有一个插槽连接到信号,在另一个条件下,你将断开它 . 当你改变模式时,你会做适当的工作 .

    好吧,他忘了在适当的时候断开连接 . 因此,每次更改模式时,都会与插槽 Build 新连接 .

    最终的结果? 1连接== 1呼叫插槽 . 2个连接= = 2个插槽 . 3个连接== 3个调用插槽等 . 这些调用“同时”发生(我知道实际上他们没有,因为它们在同一个事件线程上,但我的意思是所有调用都是连续处理的) .

    正如@Job在他的一条评论中指出的那样(他值得信任,所以请不要为我的工作投票),Qt::UniqueConnection将阻止这个问题 .

  • 5

    通常不好的事情 . 将插槽连接两次甚至更多次是完全可以接受的,但是当信号被触发时,你的插槽将被调用,这可能不是你想要的 .

    请注意,拥有多个连接并不一定是错误的 . 它(可能)是完全有效的用途 . 它们非常罕见,我当然无法想到我曾经将它作为一种功能使用过 . 我可以回想起存在多重连接的所有情况都证明是一个错误而非预期 .

相关问题