Main Window == God Class

Alles rund um die Programmierung mit Qt
Antworten
PeterZ
Beiträge: 2
Registriert: 30. Oktober 2012 14:37

Main Window == God Class

Beitrag von PeterZ » 30. Oktober 2012 20:55

Hey Leute,

ich habe ein (für mich) großes Projekt angefangen. Das Mainwindow hat viele Buttons, deren Funktionen alle in der .cpp Datei des Windows implementiert sind.
Leider sind so 85% des Codes in einer Datei und das Ganze wird wirklich unübersichtlich.
Meine Frage: Wie kann ich verhindern, dass das Mainwindow zur Godclass wird? Ich habe schon versucht, Module zu bilden. Das Problem ist jedoch, dass innerhalb fast aller Funktionen sehr oft auf verschiedene Elemente der UI zugegriffen werden muss. Bestimmt hat schon jemand das gleiche bei seinem eigenen Projekt erfahren und ich würde mich sehr darüber freuen zu hören, wie ihr das Problem in den Griff bekommen habt oder wie ihr die Funktionen gestaltet habt.

Falls es schon so ein Thema gab: Tut mir leid, ich wusste absolut nicht, was für einen Suchbegriff ich eingeben soll.

Grüße
Peter

Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Main Window == God Class

Beitrag von Christian81 » 31. Oktober 2012 19:01

Naja, mit Signals & Slots und Übergabe von Pointern an Klassen kann man schon viel machen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung

PeterZ
Beiträge: 2
Registriert: 30. Oktober 2012 14:37

Re: Main Window == God Class

Beitrag von PeterZ » 31. Oktober 2012 22:10

Daran hab ich auch schon gedacht. Aber ist es im Sinne der Objektorientierung, wenn ich Pointer der GUI-Elemente übergebe?
Ich habe mehr an Kapselung gedacht, nur fällt mir keine Methode zur Realisierung ein.

franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Main Window == God Class

Beitrag von franzf » 31. Oktober 2012 22:24

Anstatt Pointer deiner Gui-Elemente rauszureichen kannst du auch an interessierte Komponenten nur die dort visualisierten WERTE (String im LineEdit, Text/Index der Combobox, ...) weiterreichen.

Als Hinweis für einen ersten Ansatz zur "Entgötterung":
Ein Widget, das in einer Liste Werte anzeigt, kann man durchaus in einer Klasse implementieren, die sich sowohl um Haltung als auch Visualisierung der Daten kümmert. Qt geht her und trennt das in "Model" und "View" auf (kannst dich ja auch in MVC einlesen - QObject und Signal/Slot kann entfernt als Controller (das "C" in MVC) angesehen werden). Das ist das was Christian meinte: Finde einzelne Aufgabenbereiche, löse sie in eigene Klassen heraus. MainWindow kann dann ja durchaus Objekte dieser Klasse als Member halten - es muss sich aber nicht mehr selber um die Aufgaben kümmern.

Antworten