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

Posted

技术标签:

【中文标题】Qt QMainWindow 用户关闭和系统中止之间的区别【英文标题】:Qt QMainWindow difference between closing by user and abort via system 【发布时间】:2011-11-22 11:05:43 【问题描述】:

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

【问题讨论】:

如果您有新问题,请提出新问题。 【参考方案1】:

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

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

【讨论】:

以上是关于Qt QMainWindow 用户关闭和系统中止之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

Qt5 QMainWindow使用

Qt隐藏最小化、最大化和关闭按钮

C++框架_之Qt的窗口部件系统的详解-上

Qt关闭QMainWindow后如何防止崩溃?

QT中QWidgetQDialog及QMainWindow的区别

(转)QT中QWidgetQDialog及QMainWindow的区别