Seite 1 von 1
[geloest] Fenster-schliessen-Signal einfangen
Verfasst: 18. Juli 2007 23:08
von Fabeltier
Hallo,
ich wuerde gerne den "close-event" eines Fensters abfangen. Ich habe eine Slot-Funktion beenden() und wenn auf den entsprechenden Button gedrueckt wird, wird der slot auch ausgefuehrt, alle Daten werden entsprechend gespeichert, etc. Wenn aber jemand das Fenster einfach per 'x', oben rechts, schliesst, wird beenden() nicht ausgefuehrt, wie haenge ich also nun meinen Slot an welches Signal des Fensters (ein QMainWindow)?
Ich schliesse das Fenster in beenden() per close(), daher wollte ich das nicht unbedingt gegeneinander kurz schliessen.
Verfasst: 18. Juli 2007 23:59
von Maxubuntu
Das, was du brauchst, hast du schon geschrieben: Ein QCloseEvent ... Implementiere dies einfach neu, zum Beispiel so:
Code: Alles auswählen
virtual DeinFenster::closeEvent(QCloseEvent* event)
{
beenden();
}
Wenn du eine Abfrage à la "Wollen Sie wirklich beenden?" auch auf das X oben anwenden willst, kannst du dies mittels
event->ignore(); machen.
Gute Nacht,
Maxubuntu
Verfasst: 19. Juli 2007 00:00
von Jaro
also ich weiss nicht wie gut die lösung ist, aber ich hänge meist das was ich will einfach in den destruktor des fensters rein, hatte bisher noch keinen fall wo das nicht geklappt hat...

auch mit X und Alt+F4 nicht....
beschäftige mich aber noch nicht sehr lange mit Qt und weiss nicht obs vielleicht was besseres gibt....
MfG Jaro
Verfasst: 19. Juli 2007 07:20
von macman
Jaro hat geschrieben:das was ich will einfach in den destruktor des fensters rein, hatte bisher noch keinen fall wo das nicht geklappt hat...

auch mit X und Alt+F4 nicht....
Wie verhinderst Du dann das schliessen des Fensters, wenn der User noch ungesicherte Daten hat und es sich dann anders überlegt?
Verfasst: 19. Juli 2007 07:57
von Christian81
Jaro hat geschrieben:also ich weiss nicht wie gut die lösung ist, aber ich hänge meist das was ich will einfach in den destruktor des fensters rein, hatte bisher noch keinen fall wo das nicht geklappt hat...

auch mit X und Alt+F4 nicht....
Hast Di Die Lösung von Maxubuntu überhaupt angeschaut?
Verfasst: 19. Juli 2007 08:28
von Jaro
Christian81 hat geschrieben:Jaro hat geschrieben:also ich weiss nicht wie gut die lösung ist, aber ich hänge meist das was ich will einfach in den destruktor des fensters rein, hatte bisher noch keinen fall wo das nicht geklappt hat...

auch mit X und Alt+F4 nicht....
Hast Di Die Lösung von Maxubuntu überhaupt angeschaut?
nein, da war ich grad am schreiben...Siehstes ja von der Zeit her.... 1 Minute Unterschied...
Verfasst: 19. Juli 2007 08:31
von Jaro
macman hat geschrieben:Jaro hat geschrieben:das was ich will einfach in den destruktor des fensters rein, hatte bisher noch keinen fall wo das nicht geklappt hat...

auch mit X und Alt+F4 nicht....
Wie verhinderst Du dann das schliessen des Fensters, wenn der User noch ungesicherte Daten hat und es sich dann anders überlegt?
Gar nicht, aber Speichern kann man mit der Methode ziemlich einfach...
Und so wie ich den Threadersteller verstenden hab, gehts ihm nicht ums verhindern, sondern, dass dann was passiert, also das beenden() aufgerufen wird, wenn das Fenster mit X geschlossen wird....
MfG Jaro
Verfasst: 19. Juli 2007 08:33
von Christian81
Jaro hat geschrieben:
nein, da war ich grad am schreiben...Siehstes ja von der Zeit her.... 1 Minute Unterschied...
Simmt, wer lesen kann ist klar im Vorteil... ok ich hab ne Ausrede - habe noch halb geschlafen

Verfasst: 22. Juli 2007 21:46
von Fabeltier
Hallo, Danke fuer den Tipp. Ich habe die Funktion ueberladen, bzw diese virtuelle Funktion implementiert - jetzt laeuft's perfekt.
Ich glaube Du meintest es so:
Code: Alles auswählen
void MeinFenster::closeEvent(QCloseEvent* event)
{ beenden(); };
...also "void" statt "virtual"
Ich finde diese Methode einfach auch stilistisch besser als eine Loesung ueber den Dtor. Klar, das funktioniert auch, in einfachen Faellen, ist aber nicht schoen und macht schon Probleme wenn man einen Confirmation Dlg einbauen will, wie oben ja schon erwaehnt.
Verfasst: 23. Juli 2007 13:59
von Maxubuntu
...also "void" statt "virtual" Wink
O ja ... tut mir leid.
In meinen Programmen schreibe ich immer
um mich selber zu erinnern, dass ich da eine virtuelle Funktion neu implementiere.
Gruß, Maxubuntu
