• .h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QFile>

QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    void saveDownloadedFile(QByteArray);

public slots:
    void on_pushButton_clicked();
    void downloadFinished();
    void downloadProgress();
    void downloadError();

private:
    Ui::Widget *ui;
    QNetworkAccessManager *networkManager;
    QNetworkReply *reply;

};
#endif // WIDGET_H
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • .cpp
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget* parent)
	: QWidget(parent)
	, ui(new Ui::Widget)
{
	ui->setupUi(this);

	networkManager = new QNetworkAccessManager(this);

	//connect(reply, &QNetworkReply::finished, this, &Widget::downloadFinished);
	// connect(reply, &QNetworkReply::readyRead, this,  &Widget::downloadProgress);
	//connect(reply, &QNetworkReply::error,this,  &Widget::downloadError);

	//connect(networkManager, &QNetworkAccessManager::finished, this, &Widget::downloadFinished);
}

Widget::~Widget()
{
	delete ui;
}

void Widget::on_pushButton_clicked()
{
	//QUrl downloadUrl("http://127.0.0.1:8081/abc.txt");
	QUrl downloadUrl("http://127.0.0.1:8081/release.zip");
	reply = networkManager->get(QNetworkRequest(downloadUrl));

	connect(reply, &QNetworkReply::finished, this, &Widget::downloadFinished);
	connect(reply, &QNetworkReply::readyRead, this, &Widget::downloadProgress);
	connect(reply, &QNetworkReply::error, this, &Widget::downloadError);


}

void Widget::saveDownloadedFile(QByteArray data) {
	//QFile file("abc_local.txt");
	QFile file("download.zip");

	if (file.open(QIODevice::WriteOnly)) {
		file.write(data);
		file.close();
		qDebug() << "File saved successfully";
	}
	else {
		qDebug() << "Error saving file";
	}
}

void Widget::downloadFinished() {
	if (reply->error() == QNetworkReply::NoError) {
		// Download successful
		QByteArray byteArray = reply->readAll();

		this->saveDownloadedFile(byteArray);
	}
	else {
		// Download error
		qDebug() << "Download error:" << reply->errorString();
	}
}


void Widget::downloadProgress() {
	// Update download progress bar or status indicator
	// qint64 bytesReceived = reply->bytesReceived();
	// qint64 bytesTotal = reply->bytesTotal();

	//qDebug() << reply->bytesToWrite();
	//qDebug() << reply->bytesAvailable();

	qint64 bytesReceived = reply->bytesAvailable();
	qint64 bytesTotal = reply->header(QNetworkRequest::ContentLengthHeader).toLongLong();

	if (bytesTotal > 0) {
		double progress = (double)bytesReceived / bytesTotal * 100;

		qDebug() << "Download progress:" << progress << "%" << " | " << "Toatal Size: " << bytesTotal/1024/1024 << "MB | " <<  "Have Download Size: " << bytesReceived / 1024 / 1024 << "MB --";
	}

	/*	Download progress : 98.6662 % | Toatal Size : 105 MB | Have Download Size : 104 MB --
		Download progress : 98.7842 % | Toatal Size : 105 MB | Have Download Size : 104 MB --
		Download progress : 98.8432 % | Toatal Size : 105 MB | Have Download Size : 104 MB --
		Download progress : 99.3153 % | Toatal Size : 105 MB | Have Download Size : 105 MB --
		Download progress : 99.3743 % | Toatal Size : 105 MB | Have Download Size : 105 MB --
		Download progress : 99.4924 % | Toatal Size : 105 MB | Have Download Size : 105 MB --
		Download progress : 99.7284 % | Toatal Size : 105 MB | Have Download Size : 105 MB --
		Download progress : 99.9054 % | Toatal Size : 105 MB | Have Download Size : 105 MB --
		Download progress : 100 % | Toatal Size : 105 MB | Have Download Size : 105 MB-- */
}


void Widget::downloadError() {
	qDebug() << "Download error";
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.