Seite 1 von 1

Was ist das richtige Programmdesign?

Verfasst: 14. Oktober 2009 19:01
von AlexanderQt
Hallo zusammen!

Ich habe eine prinzipielle Frage bzgl. des Programmdesigns mit Qt.

Meine Situation ist folgende: Ich möchte ein Programm schreiben, welches den Benutzer durch eine Folge von Zwischenschritten leitet. Die Abfolge ist dabei nicht linear vorgegeben, sondern es können - je nach Benutzereingaben - unterschiedliche Pfade genommen werden, um das Problem zu lösen.

Während der Benutzer durch das Programm geführt wird, wird parallel dazu eine Datenstruktur gefüllt, welche sich seine Eingaben merkt. Dieses Objekt muss also während aller Zwischenschritte verfügbar sein.

Meine Frage ist nun: Wie designe ich diese Zwischenschritte am besten?

1. Soll jeder Zwischenschritt eine Seite in QStackedWidget sein? Dann befürchte ich, dass das Programm recht groß und unübersichtlich wird, wenn ich alle Elemente miteinander verknüpfe. Außerdem müsste ich dann sehr aufpassen, wie die Reihenfolge der einzelnen Seiten ist und es könnte Chaos geben, wenn sich diese Reihenfolge während der Zeit ändert.

2. Soll jeder Zwischenschritt durch ein eigenes Widget realisiert sein, welches dann im Hauptprogramm mit den anderen Widgets verknüpft wird (z.B. wird bei einem Knopfdruck das aktuelle Widget geschlossen und ein neues für den nächsten Schritt angezeigt)? Dann hätte ich das Problem, dass ich jedes Mal, wenn ein Widget erstellt wird, die Verbindungen neue erzeugen müsste (z.B. wenn der Benutzer vor und zurück geht).

3. Liege ich total daneben und ein anderer Weg ist geschickter?

Vielen Dank an jeden, der sich die Mühe macht mir hierbei weiter zu helfen! :)

Verfasst: 15. Oktober 2009 13:14
von RHBaum
Wenn man den user so richtig schön Schritt fuer Schritt / Seite für Seite durch eine Anwendung führt, spricht man eigentlich von einem Wizard.

Schau Dir mal QWizard an ...

Die verbindung zu deinem DatenKlasse (Datenbank) muss natuerlich jede "Seite" kennen .... dafuer kann man QWizardPage ableiten und die deiner Ableitung von QWizard übergeben ... die koennten als zusaetzlichen parameter im CTor nen verweiss auf deine DatenKlasse haben ....

Ciao ...

Verfasst: 15. Oktober 2009 13:26
von AlexanderQt
Hallo RHBaum,

vielen Dank für Deine Antwort!

Ich habe bis jetzt QWizard gemieden, da dort schon ein prinzipielles Design vorgegeben ist - wenn ich es richtig verstanden habe. Ich hätte gerne für die Platzierung der GUI-Elemente ein möglichst leeres Widget.

Aus Deiner Antwort schließe ich aber auch, dass vermutlich ein Einzelseiten-basierter Ansatz der bessere ist und diese Seiten dann im Hauptprogramm miteinander verknüpft werden.

Ich werde das einmal ausprobieren und schauen, ob es einigermaßen geht. Die Signal-Slot-Verbindungen kann ich vermutlich relativ geschickt im Aufruf der entsprechenden Seite kapseln.

Verfasst: 15. Oktober 2009 15:20
von RHBaum
Ich versteh dein Problem eigentlich ueberhaupt ned, muss ich ehrlich zugeben :-)
Ich habe bis jetzt QWizard gemieden, da dort schon ein prinzipielles Design vorgegeben ist
Noe, bei nem WIzard is vorgegeben, das der user schritt fuer schritt durch deine "Seiten" sich durchangelt. Was auf den Seiten selber ist, ist ganz allein dein problem. Ich dacht das ist genau das was du wolltest.
Aus Deiner Antwort schließe ich aber auch, dass vermutlich ein Einzelseiten-basierter Ansatz der bessere ist und diese Seiten dann im Hauptprogramm miteinander verknüpft werden.
Noe ....
bei wizard haettest die kleinen Vorteil, das eh seite fuer seite aufrufst ....

Ein Tabview kann ich auch so bauen, das auf der entsprechenden Tab seite ein Beliebiges von QWidget abgeleitetes Object liegt, welches auch erst erzeugt werden kann, wenn die seite anspringst, und wieder zersteort wird, wenn die seite verlaesst.
Prinzipiell kannst du eh mit Masterforms und Subforms arbeiten, sprich du hast in deinem Oberen Form im layout irgendwie eine benutzerdefinierte klasse die von QWIdget abgeleitet ist. dieses haette dann nen eigenes ui file und ne eigene Logic. Damit koennst du megagrosse dialoge bauen, und trotzdem die teilbereiche in eigene klassen (widgets) haben. Damit waer deine Kapselung / Gliederung wieder ok ...

Ciao ...