首页 > 解决方案 > 连续中止后未触发 Qt 下载进度

问题描述

对于使用 Qt 5.3.2 的旧工具,我们最近遇到了一个问题。使用QNetwork管理器我们正在下载文件,但在我们下载它们之前,我们会检查它们是否可以从某个区域下载。为此,我们在第一个进度指示处进行中止。

由于最近我们downloadProgress在一些中止后不再收到信号,并且仅在非常快速的网络连接时才会发生。通过WiFi它不会复制。可能是什么问题呢?

一些代码片段:

开始下载:

networkManager->get(request);
networkReply->setReadBufferSize(4 * 1024 * 1024);
    connect(networkReply, SIGNAL(finished()),
        this, SLOT(onDownloadFinished()));

connect(networkReply, SIGNAL(downloadProgress(qint64, qint64)),
        this, SLOT(onDownloadProgress()));

connect(networkReply, SIGNAL(error(QNetworkReply::NetworkError)),
        this, SLOT(onDownloadError(QNetworkReply::NetworkError)));

connect(networkReply, SIGNAL(sslErrors(QList<QSslError>)),
        this, SLOT(onDownloadSslErrors(QList<QSslError>)));

connect(networkReply, SIGNAL(encrypted()),
        this, SLOT(onEncrypted()));

下载进度:

void DownloadManager::onDownloadProgress()
{
    networkReply->abort();
                nrAborts++;
                startDownload(myurl);
}

下载完成:

void DownloadManager::onDownloadFinished()
{
    networkReply->deleteLater();
}

标签: c++qtnetwork-programming

解决方案


由于读取缓冲区在第一次之前已满,onDownloadProgress并且从未被读取,因此所有内容都被卡住了。订阅readyRead和读取数据networkReply->readAll()会导致缓冲区被刷新并被downloadProgress调用。


推荐阅读