Qt QMainWindow 用户关闭和通过系统中止之间的区别

发布于 2024-12-17 13:04:13 字数 326 浏览 3 评论 0原文


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

Could you tell me how can I determine between QMainWindow close event initiated by user and abonormal termination by SIG_KILL in Linux or TerminateProcess() in Windows?
That's because the difference in urgency exists.
I can refuse closing by user or user can think as long as required.
But I have to save intermediate results and current state as soon as possible when aborting or till the user will do next fatal abort try.
I can try to figure out analysing the mouse position on closeEvent(). But it depends on the taskbar look. I can set the app to non-minimized state and wait the next user actions. But that's not a good behaviour in the abort case. User can try the next fatal abort actions or the time for save would lost.
Best regards, Gennady

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

沦落红尘 2024-12-24 13:04:13

如果您的应用程序收到 SIGKILL,它没有任何时间执行任何操作。当场终止。你无法捕获或阻止该信号。因此,您无法将 SIGKILL 与正常的应用程序关闭“区分开”:您将不知道自己何时被强行杀死。 (TerminateProcess() 也是如此。)

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

If you application receives a SIGKILL, it will not have any time to do anything. It is terminated on the spot. You can't catch or block that signal. So you can't "differentiate" a SIGKILL from normal application shutdown: you will not know when you have been forcefully killed. (Same thing for TerminateProcess().)

If you need to do something during normal application shutdown, you should connect your cleanup routine to the QCoreApplication::aboutToQuit() signal. Check the docs, that is exactly what it is designed for.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文