有没有一种方法可以让一个暂时忽略所有传入的信号?
我知道存在一个“”,如果设置为true,则会阻止发送信号。
我希望实现相反的功能,即使事件队列不排队,或者如果它在阻止插槽的同时忽略调用插槽时,则简单地不排队。
换句话说,我正在寻求“”。
我知道存在一个“”,如果设置为true,则会阻止发送信号。
我希望实现相反的功能,即使事件队列不排队,或者如果它在阻止插槽的同时忽略调用插槽时,则简单地不排队。
换句话说,我正在寻求“”。
据我所知,QObject没有内置的方法可以(暂时)关闭接收/处理信号。
最简单的实现方式可能是直接在相关函数中实现检查和忽略功能:
void doStuff()
{
if (ignoreSignals)
return;
// Actual functionality here...
}
如果您无法更改代码,您可以考虑断开与相关信号插槽函数(或整个对象)的连接,并稍后重新连接。
另外,您可以实现一个“过滤器”对象,其他对象连接到该对象(而不是直接连接到原始对象),并且实现前面提到的检查和忽略功能,仅在过滤器未激活时转发(即发射)信号。
QObject
连接到一个继承自 QObject
的 代理 对象上,并且其角色是传递信号。要切换信号的开关,只需调用 QObject::blockSignals()
即可。 - RAM
bool disableSlotsFlag
并在每个槽中进行检查。另一种方法是断开所有槽并在必要时重新连接。顺便说一下,您可以在这里找到很多有用的代码。 - Dmitry Sazonov