Russian Qt Forum

Qt => Общие вопросы => Тема начата: yarick от Август 14, 2013, 09:45



Название: Отловить закрытие программы без окон при завершении работы
Отправлено: yarick от Август 14, 2013, 09:45
Моя программа имеет иконку в трее и окна открываются по мере необходимости.
Мне нужно обработать событие - когда программа выключается при завершении работы Windows. Обычно это делают через closeEvent.
Но в случае когда ни одного окна не открыто - только трей висит - что делать?

Сигнал aboutToQuit() не работает в данном случае. А данные как-то нужно сохранять


Название: Re: Отловить закрытие программы без окон при завершении работы
Отправлено: Old от Август 14, 2013, 09:48
Посмотрите на QSessionManager


Название: Re: Отловить закрытие программы без окон при завершении работы
Отправлено: LisandreL от Август 14, 2013, 10:05
Можно отнаследоваться от QApplication и перегрузить %osname%EventFilter для нужных вам ОС.
Примерно так:
Код
C++ (Qt)
#include <qt_windows.h>
bool MyApplication :: winEventFilter( MSG *message, long *result )
{
   UINT& msg = message->message;
   if ( msg == WM_QUERYENDSESSION || msg == WM_ENDSESSION )
   {
       /*Делаем что нужно*/
       *result = ...;
       return true;
   }
   return QApplication::winEventFilter( message, result );
}

Ну или через QCoreApplication::setEventFilter аналогичное попробовать сделать (не пробовал).