Vorübergehend blockieren Signale zwischen zwei QObjects
Ich würde gerne allgemein und vorübergehend blockiert die Signale zwischen zwei QObjects
ohne änderung der anderen Signale/slots Verhalten, und ohne zu wissen, Ihre Zusammenhänge.
Etwas wie QObject::blockSignals(bool), sondern nur handeln zwischen zwei QObjects
.
Ist, die Umsetzung der folgenden SignalBlocker::blockSignals(bool)
Funktion:
class SignalBlocker {
public:
SignalBlocker(QObject *sender, QObject *receiver) :
mSender(sender), mReceiver(receiver) {}
void blockSignals(bool block);
private:
QObject *mSender, *mReceiver;
}
Wäre es möglich, durch disconneting und neu verbinden Sie die Objekte, aber zuerst die Liste der Signale/slots gespeichert werden müssten.
Introspektion-Methoden scheint das nicht zu sein, mächtig genug, um dies zu erreichen (ich sah QMetaObject
und QSignalSpy
ohne Erfolg).
InformationsquelleAutor FabienRohrer | 2013-03-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
QT haben keine Kapazitäten, um deaktivieren Sie die signal-slot-pair-Mädchen nur. Versuchen Sie diese Problemumgehung:
InformationsquelleAutor Oleg
da Sie möchten, dass der Absender und der Empfänger sendet keine Signale in diesem Bereich, ich würde nur versuchen, Sie zu nutzen
blockSignals(bool)
sind und jetzt nur verwenden
vielleicht ist es möglich, eine Klasse zu erstellen wie
SignalBlocker
und geben den Objekten eine template-Funktion Zeiger, was Sie wollen, zu blockieren ... so wäre es blockiert nur das signal, das Sie möchtenInformationsquelleAutor Zaiborg
U verwenden können
disconnect(sender, 0, receiver, 0);
trennen Sie allesender
's Signale von allenreceiver
's slots.Versuchen Sie etwas wie
void QObject::connectNotify ( const char * signal ) [virtual protected]
odervoid QObject::disconnectNotify ( const char * signal ) [virtual protected]
um eine Liste der verbunden/getrennt-Signale, aber ich glaube nicht, dass du tust, was Recht ist. Warum brauchen Sie das?InformationsquelleAutor SpongeBobFan