﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>学习日记 &#187; shutdown</title>
	<atom:link href="https://www.softwareace.cn/?feed=rss2&#038;tag=shutdown" rel="self" type="application/rss+xml" />
	<link>https://www.softwareace.cn</link>
	<description>时刻想着为自己的产品多做一些对他好的事情</description>
	<lastBuildDate>Fri, 20 Mar 2026 06:58:28 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	
	<item>
		<title>程序隐藏，关闭计算机时，等待程序后台处理</title>
		<link>https://www.softwareace.cn/?p=75</link>
		<comments>https://www.softwareace.cn/?p=75#comments</comments>
		<pubDate>Thu, 17 Jan 2013 03:52:48 +0000</pubDate>
		<dc:creator><![CDATA[littlesu]]></dc:creator>
				<category><![CDATA[Qt Gui]]></category>
		<category><![CDATA[开发问题]]></category>
		<category><![CDATA[shutdown]]></category>

		<guid isPermaLink="false">http://192.168.0.106/?p=74</guid>
		<description><![CDATA[总结下开发工作日志提醒软件时遇到的问题，主程序最小化，关机时存下关机时间，下次启动时发送本次关机时间到服务器， [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>总结下开发工作日志提醒软件时遇到的问题，主程序最小化，关机时存下关机时间，下次启动时发送本次关机时间到服务器，测试发现，主程序不隐藏，关机时能进入 closeevent(),及析构函数等，但是隐藏时，并不走这些步骤。</p>
<p>尝试解决办法</p>
<ul>
<li>
		QDialog::winEvent 拦截&nbsp;if (message-&gt;message == WM_QUERYENDSESSION) 测试失败</li>
<li>
		重载 QApplication::commitData( QSessionManager &amp; manager ) 会话管理 &nbsp;感谢QT官方回答者 http://qt-project.org/forums/viewthread/5223 测试成功</li>
</ul>
<p></p><pre class="crayon-plain-tag">//QMyApplication.h
class QMyApplication: public QApplication
public:
           virtual void commitData ( QSessionManager &amp;amp; manager );
signals:
	void appShutdown();


//QMyApplication.cpp
void QMyApplication::commitData( QSessionManager &amp;amp; manager )
{
	//if (manager.allowsInteraction())
	{
		manager.release();
		emit appShutdown();
		//if (error) manager.cancel();
	}
}

//main.cpp
int main(int argc, char *argv[])
{
	QMyApplication a(argc, argv);
        a.exec();
}

//MainWindow.h
slots:
         void whenShutdownDothing();
//MainWindow.cpp

MainWindow()
{
        connect(qApp, SIGNAL(appShutdown()), this, SLOT(whenShutdownDothing()));
}</pre><p></p><pre class="crayon-plain-tag">void MyApplication::commitData(QSessionManager&amp;amp; manager)
 {
     if (manager.allowsInteraction()) {
         int ret = QMessageBox::warning(
                     mainWindow,
                     tr(&amp;quot;My Application&amp;quot;),
                     tr(&amp;quot;Save changes to document?&amp;quot;),
                     QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);

         switch (ret) {
         case QMessageBox::Save:
             manager.release();
             if (!saveDocument())
                 manager.cancel();
             break;
         case QMessageBox::Discard:
             break;
         case QMessageBox::Cancel:
         default:
             manager.cancel();
         }
     } else {
         // we did not get permission to interact, then
         // do something reasonable instead
     }
 }</pre><p></p>
]]></content:encoded>
			<wfw:commentRss>https://www.softwareace.cn/?feed=rss2&#038;p=75</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
