Seite 1 von 1

Grundlegenede Signals/Slots Design-Frage

Verfasst: 15. Juli 2008 14:33
von diddely
Hi,

ich habe eine Mainwindow (GUI) Klasse A und eine Klasse B (Qobject).
Die MainWindow enthält eine Combox,
welche mit Werten gefüllt werden muss.
Die zu füllenden Werte sucht Klasse B mit der eigenen Methode getValues().

Meine bisherige Vorgehensweise (in C++) war so, dass ich ein Objekt von B in der GUI-Klasse A als private erzeugt habe.

In der Gui-Klasse A rufe ich dann im Ctor die Methode getValues() von Klasse B auf, damit es anfängt die Werte zu suchen.
Nach Abschluss der Methode, kann ich die gesammelten Werte aus B mit einer anderen Methode in A, also meine Combobox, übergeben.


Sollte man sowas generell mit Signals und Slots erledigen?


Wenn ja, wie würde sich die neue Vorgehensweise von meiner bisherigen abweichen?

Eventuell so?
Bei jedem einzelnen Wert, dass die Klasse B findet ein signal emitten?
Damit ein Slot in der Klasse A diesen empfängt und den Wert in die Combobox einträgt?
Diese Idee finde ich nicht so schön.
Da ich ehh ein Objekt von B in A habe, kann ich genauso gut eine Methode aufrufen um die Daten zu bekommen.


Bräuchte mal einen Schupser in die richtige Richtung :)


danke!

Verfasst: 15. Juli 2008 15:01
von Christian81
Kommt darauf an wie lange getValues() läuft. Dauert es 'lange' so ist es sicherlich sinnvoller ein finished() Signal zu verschicken und dann alle Daten in die Combobox zu füllen. Geht es schnell lohnt sich das alles nicht und ich würde direkt füllen.

Verfasst: 15. Juli 2008 15:12
von diddely
Ok, dann lass ich das beim direkten befüllen.

Habe ich es jetzt richtig verstanden? Bei solchen Sachen Signals einsetzen, wenn die Prozedur zeitintensiv ist ansonsten auf die klassische Art Daten übermitteln.
Würde ja heißen ich müsste im zeitintensiven Fall meine "Getvalues" in einem seperaten Thread laufen lassen. Stimmts?

Ich bin immer davon ausgegangen, dass in QT Daten jewlicher Art immer mit Signals und Slots hin und hergeschoben werden.

Danke nochmals!

Verfasst: 15. Juli 2008 15:16
von Christian81
Das mit dem Thread ist richtig (hatte ich oben vergessen zu erwähnen).
Es wird nicht alles per Signal/Slot hin- und hergeschoben. Nur Dinge die nicht wirklich miteinander zu tun haben wie z.B. die Daten einer Http-Transaktion zu der verarbeitenden Klasse (der ist es ja egal wo es herkommt), die Aktion des Mausklicks auf einen Button zu der ausführenden Aktion, ...

Verfasst: 15. Juli 2008 15:26
von diddely
Ok, nochmals danke!