我很困惑在QApplication::commitData
中应该做什么和不应该做什么。这个名称意味着我应该只存储状态,而文档说它不应该关闭应用程序。但是,默认实现确实关闭了所有窗口,从而关闭了应用程序。此外,如果这不是检测窗口关闭的方法,我看不出有任何其他方法可以判断窗口确实正在关闭。
还有相关的CCD_ 2。函数名称的含义大致相同,文档也非常相似。
我应该如何正确检测系统何时关闭,并保存我的状态和关闭我的应用程序?commitData
真的是正确的方式吗?只是名字很差,文档不好?
在我检测应用程序关闭的实践中,我通常连接到插槽void QCoreApplication::aboutToQuit ()
。正如文档中所说:
如果您的应用程序必须在最后一秒进行清理,则该信号特别有用。请注意,在此状态下不可能进行任何用户交互。
到目前为止,这对我来说很好。
commitData()和saveState()可能显得多余。
但是文件表示
此外,大多数会话管理器很可能会在应用程序启动后立即请求保存状态。这允许会话管理器了解应用程序的重新启动策略。
也许这就解释了为什么"数据"one_answers"状态"的概念是分开的。在最初的通话过程中,与用户进行交互是不友好的。
关闭应用程序的默认响应似乎是一个很好的设计,因为如果你不重新实现,那么最安全的做法是关闭应用程序(就像用户选择了退出操作一样),这也应该保存用户的数据。
操作系统正在关闭,还是仅关闭会话?就你的应用程序而言,这只是会话(因为从技术上讲,用户可能正在注销,操作系统继续运行。)用户可能会认为应用程序没有"关闭",只是"在数据安全的情况下暂停"
还可以考虑像iOS这样的移动平台,在那里应用程序似乎永远运行。