![](/img/trans.png)
[英]Retrieving data from web with QNetworkAccessManager: the file is downloaded but QNetworkReply::readAll returns null
[英]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.