[geloest] Fenster-schliessen-Signal einfangen

Alles rund um die Programmierung mit Qt
Antworten
Fabeltier
Beiträge: 33
Registriert: 3. Juni 2007 04:46
Wohnort: München

[geloest] Fenster-schliessen-Signal einfangen

Beitrag 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.
Zuletzt geändert von Fabeltier am 22. Juli 2007 21:48, insgesamt 1-mal geändert.
Maxubuntu
Beiträge: 20
Registriert: 18. April 2007 19:46
Wohnort: Flensburg
Kontaktdaten:

Beitrag 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
Jaro
Beiträge: 5
Registriert: 5. Juni 2007 00:58
Wohnort: München

Beitrag 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
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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?
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:

Beitrag 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?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Jaro
Beiträge: 5
Registriert: 5. Juni 2007 00:58
Wohnort: München

Beitrag 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...
Jaro
Beiträge: 5
Registriert: 5. Juni 2007 00:58
Wohnort: München

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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 :wink:
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Fabeltier
Beiträge: 33
Registriert: 3. Juni 2007 04:46
Wohnort: München

Beitrag 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" :wink:

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!
Maxubuntu
Beiträge: 20
Registriert: 18. April 2007 19:46
Wohnort: Flensburg
Kontaktdaten:

Beitrag von Maxubuntu »

...also "void" statt "virtual" Wink
O ja ... tut mir leid. :roll:

In meinen Programmen schreibe ich immer

Code: Alles auswählen

virtual void blah() { ... };
um mich selber zu erinnern, dass ich da eine virtuelle Funktion neu implementiere.

Gruß, Maxubuntu

:D
Antworten