2010-01-15 10 views
8

Ich kann mir vorstellen, dass es einige von ihnen je nach Ereignis gibt, aber zur gleichen Zeit, denke ich, kann dies eine beste Möglichkeit zum Debuggen sein, und eine interessante Lektion.Wie abfangen alle Signale von einem bestimmten Ereignis in Qt?

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

Mit anderen Worten, ich möchte nicht jedes mögliche Signal aus der Dokumentation überprüfen, sondern nur sehen, welche Signale ausgegeben werden, wenn ich eine Aktion in meiner Anwendung durchführe.

Antwort

9

Dies ist mit keiner öffentlichen API möglich.

Wenn Sie jedoch Ihren Code in einen QTestLib-basierten Komponententest eingeben, können Sie den Komponententest mit -vs ausführen, um alle ausgegebenen Signale auszudrucken.

6

Vielleicht möchten Sie einen Blick auf die Klasse QSignalSpy werfen. Ich denke, obwohl Sie manuell das Signal verbinden müssen, das Sie ausspionieren möchten.

3

Ich denke nicht, dass dies mit Qt möglich ist. Sie können

  • Liste aller Signale einer Klasse mit QMetaObject :: method und QMetaMethod :: methodType;
  • verbinden Sie all diese Signale mit einem Ihrer eigenen Steckplätze;
  • Überprüfen Sie, wer mit QObject :: sender einen Slot aufgerufen hat.

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

+0

Danke für den Hinweis! Wie mache ich das? Die QMetaObject :: Methode fragt nach einem Parameter. Ich bin mir nicht sicher, was ich dafür brauche. –

1

Auschecken signal spying. Habe ein paar großartige Einblicke in die QT-Bibliothek und spioniere Signale/Slots aus.