QHttp示例qt 4.4.3的问题

时间:2009-07-27 12:07:20

标签: c++ qt qt4 download

我正在尝试将QHttp用于更新应用。但是我有一个问题,我无法解决。

我尝试下载文件(工作正常),但如果没有连接到互联网,则创建文件但有0个字节。然后我的旧文件被空文件覆盖,这对于尝试使用该文件的应用程序来说并不是那么好。我需要检查计算机是否已连接到互联网。

注意:代理可能会设置。我在Qt的主页上使用了this example

4 个答案:

答案 0 :(得分:1)

你应该像Mike Suggested一样切换到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();
    }
}

}

答案 1 :(得分:0)

首先,您现在可能应该使用QNetworkAccessManager而不是QHttp。

使用其中任何一个,您应该对您几乎总是知道将要启动的网站(例如http://www.google.com/)进行虚拟查询,并将其用作测试以查看您是否具有互联网连接。

更好的方法是使用QNetworkAccessManager读入QByteArray,然后在写入文件之前检查它是否为空。

答案 2 :(得分:0)

每当您编写可能已存在的文件时,您应首先创建QTemporaryFile,然后在成功下载后将其重命名为最终名称。

答案 3 :(得分:0)

我遇到了同样的问题,经过一番探讨后,我把问题分解为项目配置文件(.pro),在破坏的配置中我明确地将网络库与语句链接:“ LIBS + = -lQtNetwork“。在工作配置中,我使用更正式(和qt compilant)方法来识别项目中包含的Qt组件,如下所示:“QT = core gui network xml”,根据您的情况进行相应调整,netowkring插槽没有在明确链接但在Linux上工作时在Windows上工作。使用qt compilant方法适用于两个平台。