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 的问题的主要内容,如果未能解决你的问题,请参考以下文章

QHttp 在 Qt5 中不可用

如何阻止 QHttp/QtWebKit 缓存页面

关于Qt,请问怎么用Qhttp访问这个网址http://192.168.1.1:8080/?action=stream 。

Qt5 http协议 获取网页数据

Qt网络应用开发初步

发送添加了用户代理的 QHTTP 请求