﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-timeelapsing</title><link>http://www.cppblog.com/timeelapsing/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 05 Apr 2026 10:30:41 GMT</lastBuildDate><pubDate>Sun, 05 Apr 2026 10:30:41 GMT</pubDate><ttl>60</ttl><item><title>QNetworkAccessManager和QHttp比较</title><link>http://www.cppblog.com/timeelapsing/archive/2009/04/04/78966.html</link><dc:creator>吴俊玉</dc:creator><author>吴俊玉</author><pubDate>Sat, 04 Apr 2009 13:09:00 GMT</pubDate><guid>http://www.cppblog.com/timeelapsing/archive/2009/04/04/78966.html</guid><wfw:comment>http://www.cppblog.com/timeelapsing/comments/78966.html</wfw:comment><comments>http://www.cppblog.com/timeelapsing/archive/2009/04/04/78966.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/timeelapsing/comments/commentRss/78966.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/timeelapsing/services/trackbacks/78966.html</trackback:ping><description><![CDATA[<p>在Qt中QNetworkAccessManager主要用于复杂情况下的QWebView使用，比如存在代理服务器的情况。<br><br>QNetworkAccessManager也提供类似QHttp的Get方法。<br>于是我想当然的认为QNetworkAccessManager能够比QHttp更方便的获取网络资源。然而一个简单的例子伤了我的心:<br></p>
<p>下载部分代码如下：<br></p>
<p>&#160;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">QByteArray</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;Download::download(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;QString&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">url)<br><img id=Codehighlighter1_51_203_Open_Image onclick="this.style.display='none'; Codehighlighter1_51_203_Open_Text.style.display='none'; Codehighlighter1_51_203_Closed_Image.style.display='inline'; Codehighlighter1_51_203_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_51_203_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_51_203_Closed_Text.style.display='none'; Codehighlighter1_51_203_Open_Image.style.display='inline'; Codehighlighter1_51_203_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_51_203_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_51_203_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;m_finished&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;m_manager</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #0000ff">get</span><span style="COLOR: #000000">(QNetworkRequest(QUrl(url)));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">m_finished)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QApplication::instance()</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">processEvents();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;m_result;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<p>下载&nbsp;http://<a href="http://www.g.cn/favicon.ico">www.g.cn/favicon.ico</a>的返回结果如下：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">HTML</span><span style="COLOR: #0000ff">&gt;&lt;</span><span style="COLOR: #800000">HEAD</span><span style="COLOR: #0000ff">&gt;&lt;</span><span style="COLOR: #800000">meta&nbsp;</span><span style="COLOR: #ff0000">http-equiv</span><span style="COLOR: #0000ff">="content-type"</span><span style="COLOR: #ff0000">&nbsp;content</span><span style="COLOR: #0000ff">="text/html;charset=utf-8"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">TITLE</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">301&nbsp;Moved</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">TITLE</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">HEAD</span><span style="COLOR: #0000ff">&gt;&lt;</span><span style="COLOR: #800000">BODY</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">H1</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">301&nbsp;Moved</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">H1</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>The&nbsp;document&nbsp;has&nbsp;moved<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">A&nbsp;</span><span style="COLOR: #ff0000">HREF</span><span style="COLOR: #0000ff">="http://www.google.cn/favicon.ico"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">here</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">A</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">.<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">BODY</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">HTML</span><span style="COLOR: #0000ff">&gt;</span></div>
<p>&nbsp;也就是QNetworkAccessManager仅处理简单的一次交互，完整的交互过程需要用户实现。<br><br>虽然统一使用QNetworkAccessManager能够在技术上保持平滑一致。<br>我还是不得不区别对待两种情况下的网络访问——同时使用QHttp和QNetworkAccessManager</p>
<img src ="http://www.cppblog.com/timeelapsing/aggbug/78966.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/timeelapsing/" target="_blank">吴俊玉</a> 2009-04-04 21:09 <a href="http://www.cppblog.com/timeelapsing/archive/2009/04/04/78966.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>