QT: MainWindow auf mehrere Klassen aufteilen
-
Hallo,
ich habe ein Problem mit meiner GUI.
Und zwar habe ich ein MainWindow mit Hilfe des QT Designers erstellt und auch erfolgreich in mein cpp projekt eingbunden mit MOC usw..
Funktioniert auch alles.
Aber in dem Fenster sind sehr viele Elemente enthalten mit vielen Signalen usw.
Derzeit ist es so, dass ich eine MainWindow Klasse habe, in der ich auf alle Elemente in der GUI zugreifen kann...das ist zwar alles ok, aber die Klasse wird extremst groß und unübersichtlich werden...Jetzt die Frage, kann ich das in mehrere Klassen aufteilen? Wenn ja wie?
Ich schaffe es irgendwie nicht, eine Klasse zu erstellen, in der ich auch zugriff auf die GUI-Elemente habe?
-
Feldmaus001 schrieb:
Jetzt die Frage, kann ich das in mehrere Klassen aufteilen? Wenn ja wie?
Ich schaffe es irgendwie nicht, eine Klasse zu erstellen, in der ich auch zugriff auf die GUI-Elemente habe?Wenn Objekte zu einer bestimmten Klasse gehören, dann gehören sie eben in genau diese hinein.
Nimmst du sie heraus, gehören sie logischerweise nicht mehr zu dieser Klasse dazu, weswegen du natürlich auch nicht mehr auf sie zugreifen kannst.Ich halte es daher für keine gute Idee, irgendwie zu versuchen etwas zu teilen, was doch eigentlich zusammen gehört.
Eine gute Entwicklungsumgebung sollte dir schon dabei helfen, im Code gut den Überblick zu behalten.Ansonsten kannst du auch direkt im Code zur "Übersichtlichkeit" beitragen, indem du beispielsweise Kommentare (kurz und aussagekräftig) hinzufügst, die Einrückungen immer beachtest, und auch mit Leerzeilen zwischen verschiedenen Teilen des Codes entsprechend sinnvoll umgehst.
-
Also ist es normal, dass wenn ich z.B. eine GUI habe, die aus einem Window besteht, alle Signale, Slots, Events oder wie auch immer...in eine Klasse sprich eine Datei kommen?
Wenn das 100 Buttons sind, dann sind dort auch alle 100 Slots (clickevents) drin enthalten?
-
Ja.
Wenn deine GUI so viele Buttons enthält, muss auch die dazugehörige Klasse dementsprechend viele Buttons deklarieren.
Falls du den Code dazu etwas verkürzen willst, könntest du das in etwa so angehen:QPushButton *buttons[100]; for(int i=0; i < 100; ++i) buttons[i] = new QPushButton("Button", this);
Um die 100 Buttons dann in deiner GUI zu positionieren, kannst du sie ja (ebenfalls wieder in einer Schleife) einem Layout hinzufügen, welches du dann am Ende setzt.
Für die slots und signals dazu kannst du dir ja etwas Ähnliches überlegen.So kommst du trotz 100 Buttons, nur auf ein paar Zeilen Code.
-
na das mit den Buttons war nur ein Beispiel, es sind sehr viel verschiedene Elemente...
Positionieren usw. mache ich alles im QT Designer, weil man da alles leicht sehr schnell editieren, positionieren, entfernen, hinzufügen ... kann...so habe ich mir das gedacht
-
Achso, na dann musst du den Code dazu eh kaum anfassen; den generiert dir ja der Qt Desginer automatisch.
-
ja das ist richtig, aber ich muss ja trotzdem auf die diversen events reagieren usw. und das ist auch nicht wenig.
-
Naja das ist dann aber generell eine Design Frage.
Wenn du wirklich so viele Buttons und andere Controls hast, kommst du da nicht drum herum.Ansonsten müsstest du dir halt einen anderen Weg überlegen, wie du mit weniger Controls die Funktionen deiner Anwendung bereit stellst.
Wär vielleicht sogar ganz sinnvoll, denn wär will schon als Benutzer erst zehn Minuten lang alle möglichen Buttons etc. drücken müssen bis das Programm dann endlich macht was man will.
-
ja okay, ich werde mir das nochmal genau überlegen
danke für deine hilfe
-
Du könntest natürlich auch deine GUI "gruppieren", indem du mehrere widgets verwendest und die dann in dein mainwindow legst.
Hinter jedes widget noch eine klasse die den zugriff darauf ermöglicht, um die eigentlichen informationen abzufragen bzw zu setzen. Eben logisch kapseln.