假设我有一个表单A,可以处理由表单B发出的信号x。 当信号x被发出时,表单A会执行某些操作。然后我关闭表单A,重新打开表单A并等待信号x。但是,处理信号x的插槽被调用了两次。 我重复关闭和重新打开表单A。处理信号x的插槽被调用的次数越来越多。
似乎旧信号仍然存在,即使它已经被接收到。 是否有任何方法可以清除旧信号?
你应该发布你打开/重新打开和关闭A表单的代码部分。
根据你的描述,当你重新打开表单时,实际上是创建了一个新的(不同的表单对象),并且一次又一次地连接相同的信号。
你应该只在需要的时候创建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。
hide()
吗? - Exa