【发布时间】:2013-03-26 09:08:10
【问题描述】:
我想在不修改其他信号/插槽行为且不知道它们的上下文的情况下,一般性地暂时阻止两个 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 没有成功)。
【问题讨论】: