Qt QMainWindow разница между закрытием пользователем и прерыванием через систему - PullRequest
0 голосов
/ 22 ноября 2011


Не могли бы вы подсказать, как я могу определить между событием закрытия QMainWindow, инициированным пользователем, и аварийным завершением SIG_KILL в Linux или TerminateProcess () в Windows?
Это потому, что существует разница в срочности.
Iможет отказаться от закрытия пользователем или пользователь может думать столько, сколько потребуется.
Но я должен сохранить промежуточные результаты и текущее состояние как можно скорее при прерывании или пока пользователь не сделает следующую попытку фатального прерывания.
Я могу попробоватьвыяснить, анализируя положение мыши на closeEvent ().Но это зависит от вида панели задач.Я могу установить приложение в не минимизированное состояние и ждать следующих действий пользователя.Но это не очень хорошее поведение в случае аборта.Пользователь может попробовать выполнить следующие неустранимые действия по прерыванию, иначе время для сохранения будет потеряно.
С уважением, Геннадий

1 Ответ

2 голосов
/ 22 ноября 2011

Если ваше приложение получает SIGKILL, оно не будет иметь времени для каких-либо действий.Это прекращается на месте.Вы не можете поймать или заблокировать этот сигнал.Таким образом, вы не можете «отличить» SIGKILL от обычного завершения работы приложения: вы не будете знать, когда вас насильственно убили.(То же самое для TerminateProcess().)

Если вам нужно что-то сделать во время обычного завершения работы приложения, вам следует подключить процедуру очистки к сигналу QCoreApplication::aboutToQuit().Проверьте документы, это именно то, для чего он предназначен.

...