Russian Qt Forum
Ноябрь 28, 2024, 07:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как исключить принудительное завершение программы при выключении ПК?  (Прочитано 7076 раз)
Lion
Гость
« : Апрель 25, 2010, 11:18 »

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

В приложении есть окно? Если да, то можно попробовать void QWidget::closeEvent ( QCloseEvent * event ) переопределить!?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #2 : Апрель 25, 2010, 12:09 »

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

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

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

Юра.
KuZ
Гость
« Ответ #3 : Апрель 25, 2010, 12:47 »

В книге Макс Шлее в 29 главе "Сохранение настроек приложения" есть под глава "Управление сеансом" там написано что нужно наследовать QApplication и переопределить его метод commitData().
Записан
Lion
Гость
« Ответ #4 : Апрель 25, 2010, 14:47 »

В приложении есть окно? Если да, то можно попробовать void QWidget::closeEvent ( QCloseEvent * event ) переопределить!?
Окна нет.

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

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

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Апрель 25, 2010, 21:11 »

>>Окна нет.
приложение консольное?
Если да, то тут у Qt слабое место, т.к. стандартные способы типа <Ctrl>+<C>, <Ctrl>+<X> ...
не завершают приложение, сама Qt этого дела не понимает.
Записан

Юра.
Lion
Гость
« Ответ #6 : Апрель 27, 2010, 13:30 »

Приложение не консольное, но главного окна у него нет, может быть свёрнуто в трей.
Записан
SASA
Гость
« Ответ #7 : Апрель 27, 2010, 17:06 »

Прочитай про QApplication::commitDataRequest ( QSessionManager & manager )
Записан
Lion
Гость
« Ответ #8 : Апрель 27, 2010, 20:11 »

Вот как раз через использование этого сигнала и решил проблему.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 23.