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