繁体   English   中英

从QNetworkReply获取百分比下载

[英]Getting the percentage downloaded from a QNetworkReply

我正在尝试从QNetworkReply获取百分比,因为正在使用以下方法下载文件:

connect(reply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(getDownloadData(qint64, qint64)) );

但是当我测试程序时,我总是得到:

进度:100

它输出两次,但我从来没有得到低于100的任何东西。我希望每次下载进度更改时都发出该信号。

我怎样才能做到这一点? 还是我在我的代码中犯了一个错误,阻止了它的发生?

编辑:@dubsjw指出我使用int出现了舍入错误。 现在,对于大图像,随着时间的推移,我从0增加到100,但是对于小图像,我仍然只得到进度:0和进度:100,中间没有任何变化。 我想发出一个进度条接收的信号,该信号从0平稳地增加到100。我该怎么做?

filedownloader.h:

#ifndef FILEDOWNLOADER_H
#define FILEDOWNLOADER_H

#include <QObject>
#include <QByteArray>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>

class FileDownloader : public QObject
{
    Q_OBJECT
public:
    explicit FileDownloader(QUrl imageUrl, QObject *parent = 0);

    virtual ~FileDownloader();

    QByteArray downloadedData() const;



signals:
        void downloaded();

private slots:

    void fileDownloaded();
   void  getDownloadData(qint64 read, qint64 total);

private:

    QNetworkAccessManager m_WebCtrl;
    QByteArray m_DownloadedData;
    QNetworkReply* reply;

};

#endif // FILEDOWNLOADER_H

filedownloader.cpp:

#include "filedownloader.h"

FileDownloader::FileDownloader(QUrl imageUrl, QObject *parent) :
    QObject(parent)
{
    QNetworkRequest request(imageUrl);
    reply = m_WebCtrl.get(request);

    connect(reply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(getDownloadData(qint64, qint64)) );

    connect(reply, SIGNAL(finished()),this, SLOT(fileDownloaded()));


}

FileDownloader::~FileDownloader()
{

}

void FileDownloader::fileDownloaded()
{
    m_DownloadedData = reply->readAll();
    //emit a signal
    reply->deleteLater();
    emit downloaded();
}

QByteArray FileDownloader::downloadedData() const
{
    return m_DownloadedData;
}

 void FileDownloader::getDownloadData(qint64 read, qint64 total)
 {

     qDebug() << "Progress:";
     qint64 percent = (read / total) * 100;
     qDebug() << percent;
 }

您要求传递给get函数的请求是有效地址吗? 我会在此时尝试调试语句,以查看您是否得到了期望的结果。 另外,请检查您的getDownloadData()函数被调用了多少次。 如果您看到它被调用一次,读取值和总值都为0,那么您就知道没有有效的请求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM