.Qt :阻止 QObject 接收信号

.Qt : Blocking QObject from receiving signals

本文关键字:信号 QObject 阻止 Qt      更新时间:2023-10-16

有没有办法告诉QObject暂时忽略所有传入的信号?

我知道存在一个"QObject::BlockSignals(bool)",如果设置为true,QObject会阻止发送信号。

我希望功能相反,我希望事件队列根本不排队,或者如果在插槽被阻止时忽略调用槽。

换句话说,我要求一个"QObject::BlockSlots(bool)"。

(据我所知(没有内置的方法可以(暂时(关闭 QObject 信号的接收/处理。

直接在相关函数中实现检查和忽略功能可能是最简单的:

void doStuff()
{
    if (ignoreSignals)
        return;
    // Actual functionality here...
}

如果您无法更改代码,则可以考虑断开((相关的信号槽函数(或整个对象(,并在以后重新连接((它。

或者,您可以实现一个"过滤器"对象,其他对象连接到该对象(而不是直接连接到原始对象(,并且实现前面提到的检查和忽略功能,仅在过滤器未激活时才转发(即发出((ing(信号。