将QNetworkReply写入文件

时间:2009-07-30 09:16:00

标签: c++ qt

我正在使用QNetworkAccessManager :: get下载文件,但与QHttp :: get不同,get没有内置方法直接将响应写入不同的QIODevice。

最简单的方法是做这样的事情:

QIODevice* device;

QNetworkReply* reply = manager.get(url);
connect(reply, SIGNAL(readyRead()), this, SLOT(newData()));

然后在newData插槽中:

device->write(reply->readAll());

但我不确定这是不是正确的方法,也许我错过了一些东西。

2 个答案:

答案 0 :(得分:7)

看起来很正确。我会使用较低级别的read()write()形式,而不是QByteArray形式,它们不能正确支持错误处理,但除此之外,它看起来还不错。

你有问题吗?

答案 1 :(得分:-1)

最好使用完成的信号在下载过程结束时读取所有内容。示例(删除事件循环并使用新的插槽使其异步):

    QNetworkAccessManager manager;
    QEventLoop loop;
    QNetworkReply *reply = manager.get( request );
    QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));

    loop.exec();

    QFile file( "YOUR FILE" );
    file.open(QIODevice::WriteOnly);
    file.write(reply->readAll());

    delete reply;