QObjects
他のシグナル/スロットの動作を変更せずに、またそれらのコンテキストを知らずに、2つの間のシグナルを一般的かつ一時的にブロックしたいと思います。
QObject :: blockSignals(bool)のようなものですが、2つの間でのみ動作し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
)。