Bloquer temporairement les signaux entre les deux QObjects

Je voudrais générique et de bloquer temporairement les signaux entre les deux QObjects sans modifier les autres signaux/slots de comportement, et sans connaître leurs contextes.

Quelque chose comme QObject::blockSignals(bool), mais seulement s'exerçant entre deux QObjects.

Qui est, la mise en œuvre de la suite de SignalBlocker::blockSignals(bool) fonction:

class SignalBlocker {

public:
  SignalBlocker(QObject *sender, QObject *receiver) :
    mSender(sender), mReceiver(receiver) {}
  void blockSignals(bool block);

private:
  QObject *mSender, *mReceiver;
}

Il serait possible par disconneting et re-connecter les objets, mais d'abord la liste des signaux/slots devrait être stockées.
L'Introspection méthodes ne semblent pas être assez puissant pour le faire (j'ai regardé QMetaObject et QSignalSpy sans succès).

OriginalL'auteur FabienRohrer | 2013-03-26