我想在QObjects
不修改其他信号/插槽行为并且不知道它们的上下文的情况下,一般性地和暂时地阻止两个信号之间的信号。
像QObject::blockSignals(bool) 之类的东西,但只在两个之间起作用QObjects
。
即实现如下SignalBlocker::blockSignals(bool)
功能:
class SignalBlocker {
public:
SignalBlocker(QObject *sender, QObject *receiver) :
mSender(sender), mReceiver(receiver) {}
void blockSignals(bool block);
private:
QObject *mSender, *mReceiver;
}
可以通过断开和重新连接对象来实现,但首先必须存储信号/插槽列表。内省方法似乎不足以实现这一目标(我看过QMetaObject
但QSignalSpy
没有成功)。