Russian Qt Forum

Qt => Общие вопросы => Тема начата: Lion от Апрель 25, 2010, 11:18



Название: Как исключить принудительное завершение программы при выключении ПК?
Отправлено: Lion от Апрель 25, 2010, 11:18
Выяснилась такая ситуация: при выглючении ПК Qt генерирует сигнал QCoreApplication::aboutToQuit(), но не дожидаясь выполнения его обработчика ОС (Windows) принудительно завершает приложение. Как можно заставить ОС ждать нормального завершения приложения?


Название: Re: Как исключить принудительное завершение программы при выключении ПК?
Отправлено: alexman от Апрель 25, 2010, 11:55
В приложении есть окно? Если да, то можно попробовать void QWidget::closeEvent ( QCloseEvent * event ) переопределить!?


Название: Re: Как исключить принудительное завершение программы при выключении ПК?
Отправлено: lit-uriy от Апрель 25, 2010, 12:09
Lion, у тебя приложение убивается без каких либо сообщений со стороны ОСьки?

Обычно Виндовоз даёт немного приложению покопаться. Например эксель иногда не сразу закрывается, тогда выскакивает окно с предложением прибить эксель, но через несколько секунд эксель закрывается сам и это окно исчезает.

>>Как можно заставить ОС ждать нормального завершения приложения?
это тоже плохо, а вдруг приложение не в меру задумчивое и пользователю придётся ждать.


Название: Re: Как исключить принудительное завершение программы при выключении ПК?
Отправлено: KuZ от Апрель 25, 2010, 12:47
В книге Макс Шлее в 29 главе "Сохранение настроек приложения" есть под глава "Управление сеансом" там написано что нужно наследовать QApplication и переопределить его метод commitData().


Название: Re: Как исключить принудительное завершение программы при выключении ПК?
Отправлено: Lion от Апрель 25, 2010, 14:47
В приложении есть окно? Если да, то можно попробовать void QWidget::closeEvent ( QCloseEvent * event ) переопределить!?
Окна нет.

Lion, у тебя приложение убивается без каких либо сообщений со стороны ОСьки?
Да, без всяких предупреждений, мне на закрытие нужно максимум пару секунд.

В книге Макс Шлее в 29 главе "Сохранение настроек приложения" есть под глава "Управление сеансом" там написано что нужно наследовать QApplication и переопределить его метод commitData().
Возможно, это поможет, надо попробовать, но есть ощущение, что этот вариант не совсем то, что мне нужно. Мне не нужно спрашивать пользователя сохранить что-то или нет, к тому же commitData не будет вызываться при завершении приложения пользователем.


Название: Re: Как исключить принудительное завершение программы при выключении ПК?
Отправлено: lit-uriy от Апрель 25, 2010, 21:11
>>Окна нет.
приложение консольное?
Если да, то тут у Qt слабое место, т.к. стандартные способы типа <Ctrl>+<C>, <Ctrl>+<X> ...
не завершают приложение, сама Qt этого дела не понимает.


Название: Re: Как исключить принудительное завершение программы при выключении ПК?
Отправлено: Lion от Апрель 27, 2010, 13:30
Приложение не консольное, но главного окна у него нет, может быть свёрнуто в трей.


Название: Re: Как исключить принудительное завершение программы при выключении ПК?
Отправлено: SASA от Апрель 27, 2010, 17:06
Прочитай про QApplication::commitDataRequest ( QSessionManager & manager )


Название: Re: Как исключить принудительное завершение программы при выключении ПК?
Отправлено: Lion от Апрель 27, 2010, 20:11
Вот как раз через использование этого сигнала и решил проблему.