.Qt:阻止QObject接收信号

问题描述 投票:0回答:1

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

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

我希望功能类型相反,我希望事件队列根本不排队,或者它是否在插槽被阻塞时忽略调用插槽。

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

c++ qt
1个回答
2
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.