0

以下を使用して、ファイルがダウンロードされているときに、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;
 }
4

1 に答える 1