Wie werden ALLE von einem gegebenen Ereignis in Qt ausgesandten Signale abgefangen?

8

Ich kann mir vorstellen, dass es je nach Event eine ganze Reihe von ihnen geben könnte, aber gleichzeitig denke ich, dass dies der beste Weg zum Debuggen sein kann und eine interessante Lektion.

Warum sollte ich es brauchen? Ich verwende eine benutzerdefinierte Klasse basierend auf QWidget , die nicht erweitert wird, wenn ich ein QDockWidget im selben Fenster entferne. Zu wissen, welche Signale ausgegeben werden, wenn dieses Dock-Widget vom De-Attachment getrennt wird, würde mir helfen, auszuwählen, welche Methode ich in meiner benutzerdefinierten Klasse überschreiben muss.

Mit anderen Worten, ich möchte nicht jedes mögliche Signal aus der Dokumentation prüfen, sondern nur sehen, welche Signale ausgegeben werden, wenn ich in meiner Anwendung etwas unternehme.

    
Piotr Byzia 15.01.2010, 14:04
quelle

4 Antworten

9

Dies ist mit keiner öffentlichen API möglich.

Wenn Sie jedoch Ihren Code in einen QTestLib-basierten Komponententest einfügen, können Sie den Komponententest mit -vs ausführen, um jedes ausgesendete Signal auszudrucken.

    
rohanpm 15.01.2010, 22:30
quelle
6

Sie können sich die QSignalSpy Klasse ansehen. Ich denke, obwohl Sie manuell das Signal verbinden müssen, das Sie ausspionieren möchten.

    
gregseth 15.01.2010 14:17
quelle
3

Ich denke nicht, dass dies mit Qt möglich ist. Du kannst

  • listet alle Signale einer Klasse mit QMetaObject :: method und QMetaMethod :: methodType;
  • auf
  • Verbinden Sie all diese Signale mit einem Ihrer eigenen Slots;
  • Überprüfen Sie, wer einen Slot mit QObject :: sender aufgerufen hat.

Aber ich stecke danach fest. Ich glaube nicht, dass neben dem Absender noch Informationen darüber vorliegen, wie ein Slot aufgerufen wurde.

    
Job 15.01.2010 14:24
quelle
1

Sieh dir Signalspionage an. Habe einige großartige Einblicke in die QT-Bibliothek und spioniere Signale / Slots aus.

    
Jure 03.11.2010 11:12
quelle

Tags und Links