[geloest] Fenster-schliessen-Signal einfangen
[geloest] Fenster-schliessen-Signal einfangen
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.
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.
Zuletzt geändert von Fabeltier am 22. Juli 2007 21:48, insgesamt 1-mal geändert.
Das, was du brauchst, hast du schon geschrieben: Ein QCloseEvent ... Implementiere dies einfach neu, zum Beispiel so:
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
Code: Alles auswählen
virtual DeinFenster::closeEvent(QCloseEvent* event)
{
beenden();
}Gute Nacht,
Maxubuntu
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
beschäftige mich aber noch nicht sehr lange mit Qt und weiss nicht obs vielleicht was besseres gibt....
MfG Jaro
Wie verhinderst Du dann das schliessen des Fensters, wenn der User noch ungesicherte Daten hat und es sich dann anders überlegt?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....
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Hast Di Die Lösung von Maxubuntu überhaupt angeschaut?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....
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
nein, da war ich grad am schreiben...Siehstes ja von der Zeit her.... 1 Minute Unterschied...Christian81 hat geschrieben:Hast Di Die Lösung von Maxubuntu überhaupt angeschaut?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....
Gar nicht, aber Speichern kann man mit der Methode ziemlich einfach...macman hat geschrieben:Wie verhinderst Du dann das schliessen des Fensters, wenn der User noch ungesicherte Daten hat und es sich dann anders überlegt?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....
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
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
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:
...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.
Ich glaube Du meintest es so:
Code: Alles auswählen
void MeinFenster::closeEvent(QCloseEvent* event)
{ beenden(); };
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.
Regel 1: Kunden wissen immer erst dann was sie wollen, wenn sie etwas sehen, und dann wollen sie etwas anderes!
O ja ... tut mir leid....also "void" statt "virtual" Wink
In meinen Programmen schreibe ich immer
Code: Alles auswählen
virtual void blah() { ... };Gruß, Maxubuntu