.Qt:阻止QObject接收信号

时间:2018-01-23 07:44:56

标签: c++ qt

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

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

我希望功能类型相反,我希望事件队列不会排队,或者在插槽被阻止的时候它确实忽略了呼叫时隙。

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

或者你可以实现一个“过滤器”对象,其他对象连接到该对象(而不是直接连接到你的原始对象),并实现前面提到的检查和忽略功能,只转发(即发出())如果过滤器未激活则发出信号。