以下を使用して、ファイルがダウンロードされているときに、QNetworkReply からダウンロードされたパーセンテージを取得しようとしています。
connect(reply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(getDownloadData(qint64, qint64)) );
しかし、プログラムをテストすると、常に次のようになります。
進行状況: 100
これは2回出力され、100を下回ることはありません。ダウンロードの進行状況が変化するたびに信号を発信したいと思います。
どうすればこれを実現できますか? または、それが起こらないようにコードを間違えたのでしょうか?
編集: @dubsjw は、int を使用して丸めエラーが発生したことを指摘しました。大きな画像では時間の経過とともに 0 から 100 に増加しますが、小さな画像では、進行状況: 0 と進行状況: 100 しか得られず、その間には何もありません。0 から 100 までスムーズに増加するプログレス バーによって受信される信号を送信したいと思います。これを行うにはどうすればよいですか?
ファイルダウンローダー.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
ファイルダウンローダー.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;
}