代码之家  ›  专栏  ›  技术社区  ›  N Jacobs

连续中止后未触发qt下载进度

  •  -1
  • N Jacobs  · 技术社区  · 6 年前

    对于使用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();
    }
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   cbuchart    6 年前

    因为在第一个 onDownloadProgress 从来没读过的都被卡住了。订阅 readyRead 和读取数据 networkReply->readAll() 使缓冲区被刷新,并且 downloadProgress 呼叫信号。