adn*_*ili 6 c++ windows qt qt-signals qtcore
我正在将一个Linux应用程序移植到用Qt编写的Windows.应用程序需要在关闭前保存一些设置.在Linux上,我们可以通过SIGTERM等的信号处理程序来实现.我如何在Windows上实现相同的功能.
如果您使用的是Qt事件循环,则可以捕获以下信号:
void QCoreApplication :: aboutToQuit()[signal]
当应用程序即将退出主事件循环时,例如当事件循环级别降至零时,将发出此信号.这可能在从应用程序内部调用quit()之后或用户关闭整个桌面会话时发生.如果您的应用程序必须进行最后一秒的清理,则该信号特别有用.请注意,在此状态下无法进行用户交互.
除此之外,如果上述信号不适合您的使用案例,您可能正在寻找以下消息:
WM_QUIT:http://msdn.microsoft.com/en-us/library/windows/desktop/ms632641( v = vs.85).aspx
WM_CLOSE:http://msdn.microsoft.com/en-us/library/windows/desktop/ms632617( v = vs.85).aspx
WM_QUERYENDSESSION:http://msdn.microsoft.com/en-US/library/windows/desktop/aa376890.aspx
WM_ENDSESSION:http://msdn.microsoft.com/en-US/library/windows/desktop/aa376889.aspx
我认为其他答案完全没有抓住重点:当您强行结束应用程序时,就像 Unix 上的 SIGKILL 一样。没有办法处理它——除非提前。提前处理的意思是确保每次更改设置时都保存设置。当然,您可以优化此行为,例如,如果设置很脏,则每隔几秒钟保存一次设置,如果您想最小化磁盘访问次数(想想移动设备上的功耗)。
很多都是由QSettings
你处理的。只要你使用QSettings
,你就会得到合理的行为。如果您自己保存文件,请使用QSaveFile
它来处理刷新文件和近似原子文件替换,这样如果在您进行写入的过程中出现终止(强制终止),您就不会丢失设置。
如果您想在应用程序被要求退出时简单地做某事,则aboutToQuit
发出的信号QCoreApplication
就是您想要做出反应的信号。这相当于处理WM_QUIT
消息,或者处理同样没有意义,SIGTERM
在Unix上处理。因此,以特定于平台的方式进行操作毫无意义,因为 Qt 已经为您完成了。WM_CLOSE
因为这是一条只有 Windows 才能收到的消息,而且 Qt 已经为您处理过了。
您还可以通过安装QAbstractNativeEventFilter
和处理WM_ENDSESSION
和来参与注销/关闭过程WM_QUERYENDSESSION
。这仅在您想提前知道应用程序将退出时才有意义。除非您明确想停止关机/注销,否则您无需担心。
归档时间: |
|
查看次数: |
6666 次 |
最近记录: |