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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt не знает события выхода из системы (пруф видео). Как корректно закрыть прогу?  (Прочитано 2364 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« : Октябрь 21, 2014, 01:51 »


В моем проекте MyTetra есть застарелый баг: иногда невозможен выход из системы (KDE4), если работает MyTetra. При этом выводится сообщение что MyTetra заблокировала выход из системы. Для выхода приходится вручную закрыть программу MyTetra, после чего можно выйти.

Это могло бы происходить из-за открытых файлов. Но в MyTetra специально сделано так, что все файлы всегда держатся закрытыми. Открываются на запись только при изменении и снова закрываются. Однако в MyTetra используется QtSingleApplication, и сдается мне, что именно эта обертка держит открытыми какие-то свои файлы, и из-за нее нельзя иногда выйти из системы (закономерность до сих пор не ясна, strace показывает только на файлы в /tmp, создаваемые не моим кодом).

Самый очевидный путь решения проблемы - выходить из MyTetra при обнаружении выхода из Иксов или выхода из DE. Однако, я не могу отследить это событие. Такое впечатление, что его просто нет. Я делаю логирование всех событий (отладочный вывод в eventFilter() главного окна). И при действиях с панелью (нажатие на кнопку K-меню), и даже при выходе из KDE4, в MyTetra никаких событий не прилетает.

Видео (10 Мб): http://rghost.ru/58633355

Вопрос: как обнаружить выход из DE или из Иксов, чтобы корректно завершить приложение?
« Последнее редактирование: Октябрь 21, 2014, 08:20 от xintrea » Записан

Собираю информацию по крупицам
http://webhamster.ru
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #1 : Октябрь 21, 2014, 02:05 »

http://qt-project.org/doc/qt-5/session.html ?
Записан
vulko
Гость
« Ответ #2 : Октябрь 23, 2014, 15:29 »

Попробуй сигнал.

Код:
void QCoreApplication::aboutToQuit() [signal]

Цитировать
This signal is emitted when the application is about to quit the main event loop, e.g. when the event loop level drops to zero. This may happen either after a call to quit() from inside the application or when the users shuts down the entire desktop session. The signal is particularly useful if your application has to do some last-second cleanup. Note that no user interaction is possible in this state.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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