我正在将一个使用Qt编写的Linux应用程序移植到Windows。该应用程序需要在关闭之前保存一些设置。在Linux上,我们可以通过信号处理程序来处理SIGTERM等信号。那么在Windows上如何实现呢?
我正在将一个使用Qt编写的Linux应用程序移植到Windows。该应用程序需要在关闭之前保存一些设置。在Linux上,我们可以通过信号处理程序来处理SIGTERM等信号。那么在Windows上如何实现呢?
WM_QUERYENDSESSION:http://msdn.microsoft.com/zh-cn/library/windows/desktop/aa376890.aspx
WM_ENDSESSION:http://msdn.microsoft.com/zh-cn/library/windows/desktop/aa376889.aspx
我认为处理QApplication::commitDataRequest信号(在Qt5中为QGuiApplication::commitDataRequest)可能比关于aboutToQuit更好。只需将信号连接到保存设置的函数即可。
会话注销将发出aboutToQuit
case WM_ENDSESSION: {
sm_smActive = false;
sm_blockUserInput = false;
bool endsession = (bool) wParam;
// we receive the message for each toplevel window included internal hidden ones,
// but the aboutToQuit signal should be emitted only once.
QApplicationPrivate *qAppPriv = QApplicationPrivate::instance();
if (endsession && !qAppPriv->aboutToQuitEmitted) {
qAppPriv->aboutToQuitEmitted = true;
int index = QApplication::staticMetaObject.indexOfSignal("aboutToQuit()");
qApp->qt_metacall(QMetaObject::InvokeMetaMethod, index,0);
// since the process will be killed immediately quit() has no real effect
QApplication::quit();
}
RETURN(0);
}