簡體   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