Получение процента, загруженного из 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;
}

0

Решение

Ваш запрос на передачу в функцию get является действительным адресом? Я бы попробовал отладочную инструкцию, чтобы увидеть, получаете ли вы то, что ожидаете. Также проверьте, сколько раз вызывается функция getDownloadData (). Если вы видите, что он вызывается один раз с 0 как для чтения, так и для общего значения, то вы знаете, что у вас нет действительного запроса.

0

Другие решения


По вопросам рекламы [email protected]