Code ausführen, wenn System heruntergefahren wird

Alles rund um die Programmierung mit Qt
Antworten
wijaa
Beiträge: 4
Registriert: 2. Februar 2009 11:20

Code ausführen, wenn System heruntergefahren wird

Beitrag von wijaa »

Hallo!

ich habe folgendes Problem:

mein Programm läuft hauptsächlich im System Tray, Fenster ist (die meiste Zeit) keines geöffnet. Wenn man das Programm beendet (etwa über das Kontextmenü des System-Tray-Icons) wird ein Eintrag in einer Art Log-Datei geschrieben.

Fährt der Benutzer nun aber den Rechner herunter, schreibt das Programm keinen Eintrag in das Logfile, was es aber tun sollte. Ich habe entsprechenden Code zwar im Destruktor des Hauptfensters (MainForm, ein QMainWindow) stehen, der Code wird aber nicht aufgerufen (warum nicht?).

QSystemTrayIcon kennt kein CloseEvent(), das man überladen könnte.

Und der Versuch, QCoreApplication::aboutToQuit() abzufragen, hat auch nicht geklappt:

Code: Alles auswählen

connect(qApp, SIGNAL(aboutToQuit()), this, SLOT(saveToFile()));
Windows-Events möchte ich eigentlich auch nicht abfragen. Habe ich aber auch mit diesem Code erfolglos versucht:

Code: Alles auswählen

virtual bool MainForm::winEventFilter(MSG* msg, long* result) {
      if(msg->message == WM_QUERYENDSESSION) {
         *result = 1;
         saveToFile();
         return true;
      }
      return false;
 };
Vielleicht kennt ihr ja noch eine Variante, die ich noch probieren könnte.

Stutzig macht mich, dass der Code im Destruktor nicht aufgerufen wird, wenn das System herunterfährt. Sollte der Code nicht in jedem Fall gestartet werden, schließlich muss der Destruktur ja aufgerufen werden, wenn die Instanz dealloziert wird?!

Grüße
wijaa
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Du könntest dir ja mal die Events mitprotokollieren, die dein QSystemTrayIcon so bekommt. Vielleicht findet sich da was.
wijaa
Beiträge: 4
Registriert: 2. Februar 2009 11:20

Beitrag von wijaa »

Das Signal "aboutToQuit" muesste doch genau das sein, was ich abzufangen habe, oder verstehe ich die Hilfe falsch? "This may happen either after a call to quit() from inside the application or when the users shuts down the entire desktop session."

Gebt bitte einen Hinweis, ob ich mit "aboutToQuit" auf der richtigen Spur bin, dann debugge ich in diese Richtung weiter.
CLRS530
Beiträge: 155
Registriert: 8. Oktober 2007 18:00

Beitrag von CLRS530 »

Nein, bist du wohl nicht, da das nichts mit dem System, sondern mit dem Programm zu tun hat.
Wenn du jetzt natürlich vorhast das Programm nie manuell zu Beenden sondern es immer(!) vom System beim Herunterfahren beendet wird, könntest du damit Erfolg haben.
Andererseits könnte es sein, das dieses Ereignis bei einem "normalen" Schließvorgang gar nicht ausgelöst wird. Einen Versuch ist es sicherlich wert.
Antworten