ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Roson的Qt之旅#85 简单网络下载程序示例代码

2022-02-27 19:59:22  阅读:176  来源: 互联网

标签:include QtWidgetsApplication1 Qt 示例 void 简单网络 connect ProgressDialog pReply


1.效果展示

 

2.头文件

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_QtWidgetsApplication1.h"
#include "QProgressDialog"

#include "QNetworkAccessManager"
#include "QNetworkReply"
#include "QNetworkRequest"
#include "QFile"

//用于下载时弹出一个进度条
class ProgressDialog : public QProgressDialog {
	Q_OBJECT

public:
	explicit ProgressDialog(const QUrl &url, QWidget *parent = Q_NULLPTR);

	public slots:
	void networkReplyProgress(qint64 bytesRead, qint64 totalBytes);
	
};


class QtWidgetsApplication1 : public QMainWindow
{
    Q_OBJECT

public:
    QtWidgetsApplication1(QWidget *parent = Q_NULLPTR);

public slots:
	void SlotStartDownload();
	void SlotHttpFinished();
	void SlotHttpReadyRead();
	void SlotCancelDownload();

private:
    Ui::QtWidgetsApplication1Class ui;

	QNetworkAccessManager *m_pNet;
	QUrl m_reqUrl;
	QNetworkReply *m_pReply;
	QFile m_downloadFile;

};

3.源文件

#include "QtWidgetsApplication1.h"


ProgressDialog::ProgressDialog(const QUrl &url, QWidget *parent /*= Q_NULLPTR*/)
{
	setWindowTitle(tr("Download Progress"));
	setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
	setLabelText(tr("Downloading %1.").arg(url.toDisplayString()));
	setMinimum(0);
	setValue(0);
	setMinimumDuration(0);
}

void ProgressDialog::networkReplyProgress(qint64 bytesRead, qint64 totalBytes)
{
	setMaximum(totalBytes);
	setValue(bytesRead);
}

QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
	connect(ui.pushButton,&QPushButton::clicked,this, &QtWidgetsApplication1::SlotStartDownload);
}

void QtWidgetsApplication1::SlotStartDownload()
{
	//下载链接
	m_reqUrl = QUrl("https://d13lb3tujbc8s0.cloudfront.net/onlineinstallers/qt-unified-windows-x86-4.3.0-online.exe");
	m_pNet = new QNetworkAccessManager;

	//请求下载
	m_pReply = m_pNet->get(QNetworkRequest(m_reqUrl));

	//下载完成处理
	connect(m_pReply, &QNetworkReply::finished, this, &QtWidgetsApplication1::SlotHttpFinished);

	//有下载的数据到达时
	connect(m_pReply, &QIODevice::readyRead, this, &QtWidgetsApplication1::SlotHttpReadyRead);

	//下载时的进度条
	ProgressDialog *progressDialog = new ProgressDialog(m_reqUrl, this);
	progressDialog->setAttribute(Qt::WA_DeleteOnClose);
	connect(progressDialog, &QProgressDialog::canceled, this, &QtWidgetsApplication1::SlotCancelDownload);
	connect(m_pReply, &QNetworkReply::downloadProgress, progressDialog, &ProgressDialog::networkReplyProgress);
	connect(m_pReply, &QNetworkReply::finished, progressDialog, &ProgressDialog::deleteLater);
	progressDialog->show();

	//保存下载的文件
	m_downloadFile.setFileName("D:\\qt-unified-windows-x86-4.3.0-online.exe");
	if (!m_downloadFile.open(QIODevice::WriteOnly))
	{
		return;
	}
}

void QtWidgetsApplication1::SlotHttpFinished()
{
	m_downloadFile.close();
}

void QtWidgetsApplication1::SlotHttpReadyRead()
{
	m_downloadFile.write(m_pReply->readAll());
}

void QtWidgetsApplication1::SlotCancelDownload()
{
	m_pReply->abort();
}

标签:include,QtWidgetsApplication1,Qt,示例,void,简单网络,connect,ProgressDialog,pReply
来源: https://blog.csdn.net/jolin678/article/details/123169175

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有