0


您能否告诉我如何确定用户发起的 QMainWindow 关闭事件与 Linux 中的 SIG_KILL 或 Windows 中的 TerminateProcess() 异常终止之间的关系?
那是因为存在紧迫性的差异。
我可以拒绝用户关闭,或者用户可以根据需要考虑。
但是我必须在中止时尽快保存中间结果和当前状态,或者直到用户进行下一次致命中止尝试。
我可以尝试弄清楚在 closeEvent() 上分析鼠标位置。但这取决于任务栏的外观。我可以将应用程序设置为非最小化状态并等待下一个用户操作。但这在中止情况下不是一个好的行为。用户可以尝试下一个致命的中止操作,否则保存时间将丢失。
最好的问候,根纳迪

4

1 回答 1

2

如果您的应用程序收到一个SIGKILL,它将没有时间做任何事情。它被当场终止。您无法捕捉或阻止该信号。因此,您无法将 SIGKILL 与正常的应用程序关闭“区分开来”:您将不知道何时被强行杀死。(同样的事情TerminateProcess()。)

如果您需要在正常的应用程序关闭期间做某事,您应该将您的清理例程连接到QCoreApplication::aboutToQuit()信号。检查文档,这正是它的设计目的。

于 2011-11-22T11:13:27.800 回答