Definier mal "nebenfenster" genauer
Alle GUI's die ich kenne arbeiten hirarisch, das heisst es besteht eine Baumstruktur der Fenster. Das ist unter anderem fuer die Nachrichtenverwaltung wichtig, und auch fuer das handling. Loeschst Du das oberste Fenster, sollten alle Deine Unterfenster (Childs) mit geschlossen werden.
Um da aber ein Gefuehl fuer zu bekommen, wuerd ich Dir literatur ueber die win32 API empfehlen ... da ist das wirklich Basics. Der X Server verwendet das selbe Prinzip, aber irgednwie ists schwerer dafuer gescheite literatur zu bekommen.
Weiterhin, eine Parent-Child beziehung ist nicht bedingt durch das einbetten eines Fensters in ein anderes, also die typische Fenster-Controls Geschichte. sondern nur durch verhandensein von paar beziehungen.
Beispiel, eine MessageBox kann und ist meist nen child von nem anderen fensterobject. Aber trotzdem wird die losgeloest von dem fenster dargestellt. man kann die verschieben etc.
Das einzigste was ne parent child Beziehung nach aussen bedingt, ist der lebenszyklus. Nen child was seinen Parent "ueberlebt" sollt es ned geben, das macht immer probleme.
Programmiertechnisch sind parent child bedingungen da, um "einfach" nachrichten zwischen den fenstern auszutauschen. So das man in einem Fenster auf Eingaben im anderen fenster reagieren kann, z.b.
Den eventmechanismuss koennt man aber auch anderweitig nachbilden .... mit eigenen events oder gar IPC, nur wird das komplexer.
Theorethisch kann man 3 Hauptfenster in eine Anwendung pappen, nur praktisch macht das eigentlich ned viel sinn ....
3 Hauptfenster bedeutet, du kannst sie getrennt schliessen, ohne das sie sich dadurch gegenseitig beeinflussen.
Die frage ist, wenn du wirklich sowas brauchst, warum dann nicht 3 Applikationen mit jeweil einem hauptfenster ???
Du kannst aber 1 Hauptfenster und 2 oder mehrere subfenster (Dialogs in dem fall) machen, die losgeloest vom hauptfenster agieren, aber wenn das hauptfenster schliests, muessen die auch weg.
Gnome anwendungen, gimp z.b. verwenden sowas, die ausgelagaerten werkzeugleisten und so ...
Also ist es ratsam, immer ein Hauptfenster mit QMainWindow zu erstellen, und dann alle folgenden Nebenfenster quasi als "Unterfenster" zu definieren??
Also ein definitives, Ja es ist ratsam. Es gaenge auch anders, aber das ist "schmerzhafter"
Oder wie stelle ich es sonst an, dass mein "Einleitungs - oder Startfenster" ein Unterfenster des Hauptfensters ist, welches noch gar nicht existiert??
Hier kannst du ne mischung aus console und GUI programm fahren ....
Der Knackpunkt deines geschilderten problems .... alle deine potentiellen "Hauptfenster" sind nie zur gleichen zeit sichtbar.
d.h. es bieten sich paar loesungs-moeglichkeiten an ....
1. du teilst dein Programm in mehrere Schritte(funktion), in jedem der Schritte (funktionen) erstellst du nen ApplicationsObject und nen Hauptfenster. Wenn die Application aus dem exit() zurueckkommt, springst du auch in der funktion zurueck.
in der main springs nur alle Schritte (FUnktionen) hintereinander an.
Das ist wie wenn du mehrere Programme hintereinander ausfuehrst.
2. du baust nur 1 applicationsobject.
verbindest das close Signal von den ersten fenstern ned mit dem close der applikation sondern von nem eigenen Slot, und in dem slot erstellst das Nachfolgende fenster und laesst es anzeigen (show()) .... danach das naechste ... etc.
Und was passiert eigentlich, wenn ich QApplication ausführen lasse?? Das ist doch nicht etwas wie ein Fenster, oder?? Benötigt man das etwa, um Guis anzeigen lassen zu können, oder kann man QApplication auch iwi umgehen
QApplication ist dein holder deiner Evnetschleife ... ohne die geht Gar nix, zu deutsch: die fenster innerhalb deiner hirarchie koennten ned miteinander kommunizieren. du koenntest bei den fenstern druecken was willst es wuerd gar nix passieren.
Die QWidgets intern referenzieren alle auf ein "globales" QApplication object (Eher nen global verfuegbares makro, welches das aktuelle QApplication object verfuegbar macht)
d.h. Qwidgets ohne QApplication geht ned (fuer reine Qt Programme eh kein Problem, aber leute die einfach Qt-Dialoge/Wigets in vorhandene Programme ohne QT einbetten muessen, plugins z.b. , muessen sich mit diesem Umstand expliziet beschaeftigen). Und es duerfen auch keine 2 Application objecte fuer die Uebersetzungseinheit gleichzeitig existieren(fuer das Makro muss immer ein eindeutiges QApp object verfuegbar sein) ....
Und was gibt es noch so für Fensterklassen??
Fuer "freistehende" Fenster verwendet man meist:
QMainWindow (wenn es menuleiste Statusbar Toolbar etc haben soll),
QDialog(fuer Dialoge aller Art, Ohne eigene Menu und toolbars meistens ),
QDockWidgets(Werkzeugleisten, die auch ausm Mainwindow ausgeklinkt werden koennen, und damit freistehend sein koennen)
falls man selber man eigenes Fenster mit eher nichtsosehr standardisierten verhalten bauen will, kann man von QWidget ableiten und mittels den fensterflags dem so fast alles auf dem Fenstaermanager möglichen verhalten beibringen .... sollt man aber wirklich nur in ausnahmefaellen machen.
BTW. die QT ist nen Framework fuer nen eher standardisiertes Look und feel.
Will man besonderes Feeling implementieren, stellt sich immer die frage nach der berechtigung der lib. weil meist hat man mit der dann mehr abreit als wie es einem vorteile bringt.
Aber so Wizards(aufeinanderfolgende fenster), EInleitungsfenster etc. beissen sich natuerlich ned mit der qt Philosphie. ALso in deinem fall kannst scho bei der qt bleiben.
Ciao ...