假设我有表格A可以处理表格B发出的信号x。 当发出信号x时,形式A会起作用。然后我关闭表格A,重新打开表格A并等待信号x。但是,处理信号x的槽被调用两次。 我重复关闭并重新打开表格A.用于处理信号x的槽称为递增数字。
即使收到了,似乎旧的信号仍然存在。 有没有办法清除旧信号?
提前感谢!
答案 0 :(得分:4)
当插槽接收到信号时,信号/插槽连接不会消失。没有“一次发射”的概念。因此,您似乎多次连接相同的信号/插槽。请注意,如果您要破坏表单A,其所有连接将自动断开连接。所以在connect语句附近设置一个断点并测试发生了什么。或者,您可以使用唯一的连接:
“Qt::UniqueConnection与AutoConnection相同,但只有当它不复制现有连接时才进行连接。即,如果相同的信号已经连接到同一对对象的同一个插槽,那么连接将失败。此连接类型在Qt 4.6中引入。“
只需添加Qt :: UniqueConnection作为连接呼叫的最终参数。
答案 1 :(得分:1)
您应该将代码的一部分发布到您打开/重新打开的位置并关闭表单A.
根据您的描述,当您重新打开表单时,您似乎正在创建一个新的(不同的表单对象)并一遍又一遍地连接相同的信号。
您应该只创建一次form A
- 当您第一次需要时 - 但在程序执行期间继续使用。重新打开时,您应该只执行formA->show()
像
这样的东西void showFormA() {
if (myFormA == 0 ) {
myFormA = new FormA(this);
//connect signals/slots
//...
}
myFormA->show();
}
编辑:
关于您的问题以及您是否可以“清除”旧信号。 见http://doc.qt.io/qt-5/qobject.html#disconnect