2011-11-22 4 views
0


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

+0

Если у вас есть новый вопрос, задайте новый вопрос. – Mat

ответ

2

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

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