1

我有一个程序应该通过网络下载文件。只要文件很小(<1GB),一切都很好。但是当文件大于 1GB 时,会发生以下两种情况之一:
a) 如果我将来自 QNetworkReply 的信号与下载进度连接到我的插槽之一,应用程序会因 std::bad_alloc 崩溃
b) 如果我没有连接来自 QNetworkReply 的任何信号,应用程序在 73% 时停止。
任何帮助都非常感谢。
这是我在连接中使用的代码和插槽:

QNetworkReply* reply = network_access_manager_->get(request);
    connect(reply,SIGNAL(downloadProgress(qint64,qint64)),parent_,SLOT(downloadProgress(qint64,qint64)));  

这是插槽:

void MainWindow::downloadProgress(qint64 bytesReceived,qint64 bytesTotal)
{

    try
    {
    ui->label->setText(QString::number(bytesReceived));

    ui->label_2->setText(QString::number(bytesTotal));
    ui->progressBar->setRange(0,bytesTotal);
    ui->progressBar->setValue(bytesReceived);
    }
    catch(std::exception& e)
    {
        qDebug() << e.what();
    }

}
4

1 回答 1

3

阅读QNetworkReply的文档:

QNetworkReply 是一个顺序访问的 QIODevice,这意味着一旦从对象中读取数据,它就不再由设备保存。因此,如果需要,应用程序有责任保留这些数据。每当从网络接收到更多数据并进行处理时,就会发出 readyRead() 信号。

因此,只需在下载期间随时使用 readyRead() 信号从 QNetworkReply 读取,然后写入文件或任何您想要的地方。

在这里您可以找到一些其他信息(特别是阅读 Frank Osterfeld 的回答):Downloading File in Qt From URL

于 2012-12-15T11:42:33.337 回答