Mehere Fenster in einer Anwendung [gelöst]

Alles rund um die Programmierung mit Qt
Antworten
reinki0013
Beiträge: 174
Registriert: 11. November 2008 09:37
Wohnort: AUT

Mehere Fenster in einer Anwendung [gelöst]

Beitrag 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
Zuletzt geändert von reinki0013 am 21. Dezember 2010 12:05, insgesamt 1-mal geändert.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
reinki0013
Beiträge: 174
Registriert: 11. November 2008 09:37
Wohnort: AUT

Beitrag 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
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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/...
reinki0013
Beiträge: 174
Registriert: 11. November 2008 09:37
Wohnort: AUT

Beitrag 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
reinki0013
Beiträge: 174
Registriert: 11. November 2008 09:37
Wohnort: AUT

Beitrag 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
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
Antworten