Seite 1 von 1
Mehere Fenster in einer Anwendung [gelöst]
Verfasst: 21. Dezember 2010 10:44
von reinki0013
Hallo zusammen,
gleich zu meinem problemchen...
ich möchte gerne beim starten meines programms eine "Suchmaske" öffnen...
in dieser "Suchmaske" soll ich auch die möglichkeit haben auf ein anderes "Fenster" zu wechseln und es soll die aktuelle "Suchmaske" schließen.
Ich habe in meiner main.cpp jetzt mal die "Suchmaske" mit .show() aufgerufen.
Muss ich dann mein anderes Fenster ebenfalls in der main.cpp aufrufen?
ich hätte das jetzt mit setVisible()/isVisible() versucht zu lösen, aber das funktioniert leider nicht so wie ich das möchte...
vielleicht könnt ihr mir weiterhelfen bzw. einen tipp geben wie ihr das löst...
besten dank im voraus...
PS: sowohl die "Suchmaske" ist ein QMainWindow als auch das "Fenster" ist ein QMainWindow
lg
Verfasst: 21. Dezember 2010 10:51
von franzf
Die Logik hinter "Suchmaske" und "anderes Fenster wechseln und Suchmaske schließen" versteh ich nicht so ganz.
Wenn die Suchmaske einfach nur die Möglichkeit des Suchens in deinen Daten sein soll: Verwende GENAU EIN Mainwindow. Zum Suchen setzt du einfach deine Suchmaske als centralWidget. Statt "Fenster wechseln" setzt du einfach wieder ein anderes centralWidget.
Mein Problem ist das "Suchmaske schließen" - das passt einfach nicht zu einem permanenten Top-Level-Widget...
Wenn das Hauptfenster mit einer statischen Ansicht immer gleich sein soll und die Suchmaske nur ein "temporäres" Objekt, kannst du die Suchmaske auch als Dialog aufpoppen lassen.
Wenn die Suchmaske dann doch gleichzeitig zum MainWindow sichtbar sein soll, pack die Suchmaske in ein DockWidget.
Verfasst: 21. Dezember 2010 11:00
von reinki0013
danke für deine antwort...
ich glaub ich hab mich nicht 100% ausdrücken können
Mein Programm soll im Prinzip 2 "QMainWindow" haben...
Am Beginn soll ein Fenster (könnte auch ein QWidget sein) erscheinen, bei dem ich suchen kann.
Wenn ich nicht suchen will, dann sollte ich über einen "Button/Menüleiste" zu einem bestimmten QMainWindow kommen.
Wenn ich suchen will, soll wiederrum ein anderes QMainWindow kommen (die beiden QMainWindow haben nichts miteinander zu tun)...
jetzt ist es natürlich so, wenn ich das "Suchfenster" als QWidget implementiere und im main.cpp aufrufe, dass ich dort ja auch meine QMainWindow`s aufrufe, das heißt es erscheinen automatisch alle 3 Fenster (im Hintergrund).
Ich möchte aber nur, dass die beiden QMainWindow`s erscheinen wenn ich entweder auf "Suchen" gehe oder über den "Button/Menüleiste" zum anderen QMainWindow wechsle...
hoffe mein problem is jetzt halbwegs ersichtlich
lg
Verfasst: 21. Dezember 2010 11:13
von franzf
Also soll sich die "Suchmaske" doch nicht schließen? Das Ding ist quasi dein Hauptfenster?
Dann lass doch das Hauptfenster die anderen Fenster kontrollieren:
Code: Alles auswählen
class MainWindow1;
class MainWindow2;
class MainWindow3;
class Hauptfenster {
public:
Hauptfenster(MainWindow1* mw1, MainWindow2* mw2, MainWindow3* mw3);
};
In HauptFenster speicherst du dir die Zeiger auf die mw[1,2,3], dann kannst du auf Aktionen dort jeder zeit die Fenster anzeigen/schließen/...
Verfasst: 21. Dezember 2010 11:22
von reinki0013
also die suchmaske soll sich schon schließen wenn:
1. ich auf "Suchen" drücke -> danach schließen und QMainWindow öffnen (nicht das QMainWindow von Punkt 2)
2. ich auf den "Button/Menüleiste" in mein anderes QMainWindow wechsle -> danach schließen
lg
Verfasst: 21. Dezember 2010 12:04
von reinki0013
@franzf:
also ich hab jetzt die lösung für mein problem gefunden...
ich habe jetzt mein QWidget, in dem ich dann je nach dem was ich machen will, die QMainWindow`s aufrufe...
besten dank für deine lösungsansätze...
DANKE
lg
Verfasst: 21. Dezember 2010 12:11
von franzf
Ist doch dann auch egal, die Lösung schaut so aus wie oben skizziert. Du hast in main deine Objekte, du übergibst den einzelnen MainWindows Zeiger auf andere MainWindows. Dann musst du nur noch einzelne SIGNAL/SLOT-Verknüpfungen erstellen (Button->clicked() -> mw1->show() && this->hide() etc...). Ich persönlich finde das aber nicht sehr Userfreundlich, und würde immer noch eine Lösung mit einem MainWindow + DockWIdgets/Tabs/MDI/... präferieren - leider kenne ich deine Anwendung nicht.
Du kannst in der main selber deine Logik nicht unterbringen, da die main (wie alle anderen Funktionen auch) von oben nach unten abgearbeitet wird und dann nur in "QApplication::exec();" stecken bleibt; dort werden Events verarbeitet.