Wechseln zwischen mehreren Fenstern

Alles rund um die Programmierung mit Qt
Antworten
martin2_86
Beiträge: 17
Registriert: 20. März 2010 00:29

Wechseln zwischen mehreren Fenstern

Beitrag von martin2_86 »

Hallo,

bin noch relativ neu in Qt und hab ein Problem wenn ich zwischen mehreren Fenstern wechsle, dass das Fenster, das ich anklicke zwar aktiv wird, aber nicht in den Vordergrund kommt. Zur Programmierung: Ich hab ne Hauptklasse die von MainWindow abgeleitet ist und per buttons können zwei Child-Widgets (ein QDialog und nochmal ein QMainWindow) aufgerufen werden die jeweils als eigene Fenster erscheinen. Das funktioniert alles soweit, wenn ich das Hauptfenster schliesse, werden die Children auch geschlossen. Nur eben funktioniert das wechseln zwischen den Fenstern nicht wie gewünscht. Die funktion QWidget::raise() ist mir bekannt, nur weiss ich nicht mit welchem Signal ich das verbinden könnte. Vielen dank im Voraus. Gruß

Martin
Exasperation
Beiträge: 186
Registriert: 11. März 2009 18:00
Wohnort: VS

Beitrag von Exasperation »

Schau dir mal QWidget::focusInEvent an.

Es ist aber trotzdem seltsam, dass das Fenster nicht automatisch nach vorne kommt... Hast du bei dem Fenster, das immer oben bleibt vielleicht das flag Qt::WindowStaysOnTopHint oder Qt::SplashScreen gesetzt?
martin2_86
Beiträge: 17
Registriert: 20. März 2010 00:29

Beitrag von martin2_86 »

Hi, erstmal vielen dank dass du dir zeit nimmst für mein Problem. Also ich übergebe dem z.B. dem Konstruktor der Klasse QDialog zuerst den Zeiger des Parent Widgets, dann eine "0", die das WindowFlag angibt. Sollte das Child-Fenster dann automatisch in den Hintergrund rücken, wenn ich beide Fenster offen habe und einen Mausklick auf das Hauptfenster mache? Die anderen beiden flags kannte ich bisher noch nicht und ich wüsste auch nicht wo ich die gesetzt haben könnte. Gruß
Exasperation
Beiträge: 186
Registriert: 11. März 2009 18:00
Wohnort: VS

Beitrag von Exasperation »

Also wenn du generell einen Dialog mit show() aufrufst und das eigentliche mainwindow ist sein parent, dein bleibt der Dialog immer oben, aber du kannst auch auf das andere Fenstern zugreifen... Hab das grade bei mir getestet... Doof ist das natürlich... Wenn du deinem Dialog als Parent 0 übergibst, dann ist das ein eigenständiges Fenster und man kann zwischen den Fenster wechseln. Allerdings ist es dann kein Child mehr vom main window und in meinem testbeispiel bekommt es dann so Sachen wie Window Icon, stylesheets usw nicht mehr mit.. Du kannst mal versuchen ob es für deine Zwecke ausreicht, wenn du als parent 0 übergibst...

Die Flags von denen ich gesprochen habe können manuell per setWindowFlags gesetzt werden. Diese werden benutzt um ein Fenster genauer für seine Funktion einzusetzen, beispielsweise Splashscreens die keinen Taskleisten-Button bekommen oder Toolboxes, die IMMER on top bleiben...

Ich schau mir das noch ein wenig an, hab da selbst noch nicht so viel Erfahrung mit... Vielleicht weiß ja jemand anderes, wie man leicht zwischen den Fenstern wechseln kann, ohne dass man als parent = 0 übergibt.
martin2_86
Beiträge: 17
Registriert: 20. März 2010 00:29

Beitrag von martin2_86 »

Hi,
genau die Erfahrungen hab ich auch gemacht. Eigentlich will ichs nicht als neues Fenster öffnen (partent=0) da es dann auch nicht gelöscht wird wenn man das mainwindow schließt, außerdem gibts nen extra task in der taskleiste, was mir nicht gefällt. Das mit Icons und stylesheets hört sich auch nicht gut an, war mir aber noch nicht bewusst. Danke dir für deine Mühe, ich hoff mal dass noch jemand anderes was weiss.
Gruß und danke
Antworten