2014-05-02 16 views
6

Ich habe etwas wie das folgende Design von Klassen und ich frage mich, ob es in Ordnung ist, dass ich viele Signal-Slot-Verbindungen verwenden, um zwischen ihnen zu kommunizieren. Es gibt eine MainWindow Klasse, die die gesamte GUI enthält, dann eine Wrapper Klasse, die eine Schnittstelle zum Backend bereitstellt, dann gibt es eine Controller Klasse zum Laichen und Verwalten von Threads und schließlich gibt es Worker s, die die ganze Arbeit erledigen.Ist es in Ordnung, Signale und Steckplätze mehrmals zu verketten?

Jetzt sagen wir, ich lade eine Datei und möchte den Fortschritt mit einem Fortschrittsbalken in der MainWindow anzeigen. Meine Worker Klasse sendet updateProgress(int progress) an Controller::handleProgress(int progress) Slot, der wiederum Fortschrittssignal an die Klasse Wrapper sendet, die wiederum ein Fortschrittssignal an das Hauptfenster sendet, das schließlich den Fortschrittsbalken aktualisiert.

Ähnlich, wenn die Daten geladen wurden, wird es in der Klasse Wrapper verarbeitet und wiederum über Signale und Steckplätze kommuniziert (obwohl mit einem weniger Schritt).

Ist es eine Standardmethode, Dinge in Qt zu tun oder sollte ich mein Design überdenken?

Antwort

8

Es ist eine gültige Möglichkeit.

Beachten Sie, dass Qt Sie weiter gehen können selbst und wie folgt vorgehen:

QObject::connect(&sender, SIGNAL(mySenderSignal(int)), 
       &receiver, SIGNAL(myReceiverSignal(int)); 

Das ist richtig, können Sie ein Signal an ein Signal binden. Alles, was es tut, kann als "gesehen werden, wenn das Signal des Senders ausgesendet wird, das Signal des Empfängers ausstrahlen".

Wenn Sie keine bestimmte Aufgabe in Ihren Zwischenslots ausführen möchten, können Sie dadurch ein paar Zeilen sparen, während Sie genau zeigen, was Sie tun: Sie leiten ein Signal weiter. Ansonsten, wenn Sie unbedingt zwischendurch arbeiten müssen, müssen Sie die Signale und die Slots behalten.

Beachten Sie, dass Sie immer noch sicher sein müssen, dass die Signaturen übereinstimmen.

+0

Sehr gute Antwort. – user2672165

Verwandte Themen