你能告诉我如何确定用户发起的QMainWindow关闭事件和Linux中的SIG_KILL或Windows中的TerminateProcess()的非正常终止?
那是因为存在紧迫感差异
我可以拒绝用户关闭或用户只要需要就可以思考
但是我必须在中止时尽快保存中间结果和当前状态,或者直到用户将进行下一次致命中止尝试。
我可以尝试找出在closeEvent()上分析鼠标位置。但这取决于任务栏的外观。我可以将应用程序设置为非最小化状态并等待下一个用户操作。但这在中止案件中并不是一个好的行为。用户可以尝试下一次致命的中止操作,否则保存时间就会丢失
最好的问候,根纳季
答案 0 :(得分:2)
如果您的应用程序收到SIGKILL
,那么将没有时间做任何事情。它在现场终止。你无法捕获或阻止该信号。因此,您无法将SIGKILL与正常应用程序关闭“区分开”:您不会知道何时被强行杀死。 (TerminateProcess()
也是如此。)
如果您需要在正常应用程序关闭期间执行某些操作,则应将清理例程连接到QCoreApplication::aboutToQuit()
信号。检查文档,这正是它的设计目标。