QHttp 示例 qt 4.4.3 的问题
Posted
技术标签:
【中文标题】QHttp 示例 qt 4.4.3 的问题【英文标题】:Problem with QHttp example qt 4.4.3 【发布时间】:2009-07-27 12:07:19 【问题描述】:我正在尝试将 QHttp 用于更新应用程序。但是有一个我无法解决的问题。
我尝试下载一个文件(运行良好),但如果没有连接到互联网,则该文件已创建但只有 0 个字节。然后,我的旧文件会被空文件覆盖,这对于尝试使用该文件的应用程序来说并不是那么好。我需要检查计算机是否已连接到互联网。
注意:代理可以设置。我使用了 Qt 主页上的this example。
【问题讨论】:
【参考方案1】:您应该按照 Mike 的建议切换到 QNetworkAccessManager,这是finished() 信号上的插槽示例:
void ApplicationUpdate::replyFinishedhttpGetChangeLog(QNetworkReply* myReply)
if (myReply->error() != QNetworkReply::NoError)
QByteArray returnedData = myReply->readAll();
if (returnedData.size() > 0)
if( m_fileChangeLog->exists() )
m_fileChangeLog->close();
m_fileChangeLog->remove();
m_fileChangeLog->open(QIODevice::ReadWrite);
QDataStream out( m_fileChangeLog );
out.writeRawData(returnedData.data(), returnedData.size());
m_fileChangeLog->flush();
m_fileChangeLog->close();
【讨论】:
【参考方案2】:首先,您现在应该使用 QNetworkAccessManager 而不是 QHttp。
使用它们中的任何一个,您都应该对一个您几乎总是知道会启动的网站(例如http://www.google.com/)进行虚拟查询,并将其用作测试您是否有互联网连接。
这样做的更好方法是使用 QNetworkAccessManager 读取 QByteArray,然后在写入文件之前检查它是否为空。
【讨论】:
【参考方案3】:每当您编写一个可能已经存在的文件时,您应该先创建一个QTemporaryFile
,然后在成功下载后将其重命名为最终名称。
【讨论】:
【参考方案4】:我遇到了同样的问题,经过一番摸索,我已将问题隔离到项目配置文件 (.pro) 中,在损坏的配置中,我将网络库与以下语句显式链接:“ LIBS += -lQtNetwork”。在工作配置中,我使用了更正式(和 qt 编译器)的方法来定义项目中包含哪些 Qt 组件,例如:“QT = core gui network xml”,根据您的情况进行相应调整,netowkring 插槽没有在显式链接时在 Windows 上工作,但在 linux 上工作。使用 qt 编译方法适用于两个平台。
【讨论】:
以上是关于QHttp 示例 qt 4.4.3 的问题的主要内容,如果未能解决你的问题,请参考以下文章
关于Qt,请问怎么用Qhttp访问这个网址http://192.168.1.1:8080/?action=stream 。