Название: Qt_5.1.0 Не могу отловить сообщение о закрытии приложения Отправлено: puh от Январь 23, 2014, 13:41 Здравствуйте.
Пробую отловить сообщение от системы о принудительном закрытии фонового приложения при выключении компьютера, чтобы кинуть сообщение в свой лог. Посмотрел по форуму похожие темы, но ничего не получается. Делаю следующее: Код: #include <QApplication> Может в пред.версия Qt это работало (?), но у меня ничего не выходит. Название: Re: Qt_5.1.0 Не могу отловить сообщение о закрытии приложения Отправлено: kambala от Январь 23, 2014, 13:50 в 4.х работало, в 5.х другой подход: см. void QGuiApplication::commitDataRequest(QSessionManager & manager) [signal]
Название: Re: Qt_5.1.0 Не могу отловить сообщение о закрытии приложения Отправлено: puh от Январь 23, 2014, 16:58 Т.е. повесив на этот сигнал обработчик, я смогу что-то сделать до закрытия приложения?
Название: Re: Qt_5.1.0 Не могу отловить сообщение о закрытии приложения Отправлено: kambala от Январь 23, 2014, 18:52 да
Название: Re: Qt_5.1.0 Не могу отловить сообщение о закрытии приложения Отправлено: puh от Январь 24, 2014, 06:07 Делаю так:
main.c: Код: #include <QApplication> MainWindow.h: Код: public slots: Код: void MainWindow::slot_qapp(QSessionManager &sm) В итоге: программа висит в трее и при выключении компа запись в лог-файл не проходит. Что не так? Название: Re: Qt_5.1.0 Не могу отловить сообщение о закрытии пl Отправлено: mezmay от Январь 24, 2014, 13:47 Вот рабочее решение отлова события выхода из системы:
Код: // на примере события Windows Но, так как мы хотим ловить виндоусовские сообщения, надо вначале "показать" окно. В main я сделал так: Код: cwin w; еще одно красивое решение придумали здесь: http://www.forum.crossplatform.ru/index.php?showtopic=9735&st=0&p=65870&#entry65870 Название: Re: Qt_5.1.0 Не могу отловить сообщение о закрытии приложения Отправлено: sach от Январь 28, 2014, 19:50 Смотри QAbstractNativeEventFilter
Мой вариант для Windows class WindowsNativeEventFilter : public QAbstractNativeEventFilter { public: WindowsNativeEventFilter(); virtual bool nativeEventFilter(const QByteArray &, void *message, long *) Q_DECL_OVERRIDE ; }; bool WindowsNativeEventFilter::nativeEventFilter(const QByteArray &, void *message, long *) { MSG* msg = reinterpret_cast<MSG*>(message); if ( msg->message == WM_QUERYENDSESSION ) { qApp->quit(); return true ; } return false ; } |