2010-01-08 8 views
5

Ich bin ein totaler Neuling zu Qt. Als ich die documentation las, stieß ich auf diese Konfiguration:Qt Use-Case für das gleiche Signal an 2 Slots am selben Objekt?

connect(Object1, Signal1, Object2, slot1) 
connect(Object1, Signal1, Object2, slot2) 

Was möglicherweise die Anwendungsfall dafür sein könnte?

Sieht seltsam für mich aus einem Erlang/Python-Hintergrund. Es muss mit C++ Vererbungs-Twists und Turns zu tun haben, denke ich.

Antwort

4

Dies ist für Fälle, wenn Sie etwas wie eine Schaltfläche haben, die zwei Teile eines anderen ändert. Es klingt vielleicht albern, aber es wäre gleichbedeutend mit dem Aufruf der zweiten Slot-Funktion vom ersten Slot aus.

Angenommen, das Klicken auf die Play/Pause-Schaltfläche macht die Stopp-Schaltfläche aktiv oder aktiv und ändert auch die QuickInfo. Dies könnte leicht mit einem Slot gemacht werden, aber Sie können die Option haben, sie auch unabhängig voneinander zu machen. Um die Wiederverwendung zu fördern, verwenden Sie die oben beschriebene Methode zum Verbinden eines Signals mit 2 Steckplätzen.

+0

Dank Adam. Sieht für mich allerdings albern aus: Ich würde eine Abstraktion fördern, bei der sich der Sender des Signals nicht darum kümmern muss, was auf der Senkenseite passieren muss. – jldupont

+0

@jldupont: Der Emitter des Signals muss sich nicht darum kümmern, was auf der Senkenseite passieren muss. Es gibt nur das Signal ab und geht mit seiner Aufgabe weiter. Derjenige, der die Verbindung herstellt, muss nicht der Sender sein, eine Verbindung kann sehr gut von der Senke oder sogar von einer dritten Partei hergestellt werden (wenn das Signal und die Schlitze öffentlich sind). – Fred

+0

Um fortzufahren, was Fred gesagt hat, finde ich fast immer den Fall, dass die Senke die Verbindung herstellt (direkt oder über einen Proxy). Eine Quelle zu haben, die alle Senken direkt kennt, vereitelt den Zweck etwas. Und wie Fred sagte, bedenke, dass das, was das Signal aussendet, sich nicht darum kümmert, wer es empfängt. Es kann jedoch den Slot-Code abhängig vom Verbindungstyp und dem Threading ausführen, bevor er fortgesetzt wird. –

3

Es würde anderen Objekten erlauben, slot1 und slot2 separat auszulösen.

connect(Object1, Signal1, Object2, slot1); 
connect(Object1, Signal1, Object2, slot2); 
connect(Object3, Signal1, Object2, slot1); 
connect(Object4, Signal1, Object2, slot2); 
0

Es ist eigentlich eine wirklich leistungsfähige Weise MVC zu tun ... Lassen Sie uns sagen, Sie wollen Blick auf „connect“ zu einem Objekt hören als Daten emittieren ...

Sie eine PieChart Ansicht verbinden kann mit :

connect(MySourceModel, SIGNAL(newDataAreThere()), PieChartView, SLOT(notifyNewDataReceived())); 

Später in der Anwendung wird ein weiteres Modul erstellt und auch brauchen, um Daten ... Kein Problem zu hören:

connect(MySourceModel, SIGNAL(newDataAreThere()), AnotherView, SLOT(notifyNewDataReceived())); 

Sie können Ihre Ansichten verbinden/trennen, und das Modell nicht einmal weiß, wer ihn hört ... Das ist nicht sein Problem ...

ich mein kleines Beispiel ist verständlich hoffen;)

+0

danke für deinen Beitrag ** aber ** das hat die Frage sorgfältig gelesen? – jldupont

+0

Oups, ja, ich lese deine Frage etwas zu schnell ... Entschuldigung! –

Verwandte Themen