From f4cda117526f098b670bc5ab447e3220e2a6f777 Mon Sep 17 00:00:00 2001 From: touwoyimuli Date: Mon, 9 Dec 2019 00:09:36 +0800 Subject: [PATCH] feat: QNetworkAccessmanager and QNetworkReply and QNetworkRequest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 提供网络协议的7层模型中的 中高层的网络协议:Http/FTP/SNMP等 ==> QNetworkAccessmanager 协调网络操作类(处理网络的请求和回应):负责发送网络请求,创建网络响应 QNetworkRequest 网络请求 QNetworkReply 网络请求的响应(提供finished()/readyRead()/downloadProgress()信号),监测网络响应的执行情况,执行相应的操作 --- QtHttpEx/ExHttp.cpp | 3 +- QtHttpEx/ExHttp.cpp.autosave | 109 ----------------------------------- 2 files changed, 2 insertions(+), 110 deletions(-) delete mode 100644 QtHttpEx/ExHttp.cpp.autosave diff --git a/QtHttpEx/ExHttp.cpp b/QtHttpEx/ExHttp.cpp index 33f04eb..dda83b2 100644 --- a/QtHttpEx/ExHttp.cpp +++ b/QtHttpEx/ExHttp.cpp @@ -12,6 +12,8 @@ ExHttp::ExHttp(QWidget *parent) : setWindowTitle("QNetworkAccessManager 网络管理使用 Http 协议下载"); m_networkManager = new QNetworkAccessManager(this); + m_reply = nullptr; + m_file = nullptr; } ExHttp::~ExHttp() @@ -65,7 +67,6 @@ void ExHttp::on_btnFile_clicked() QDir dir(currPath); dir.mkdir("temp"); - ui->lineEditFile->setText(currPath + "/temp/"); } diff --git a/QtHttpEx/ExHttp.cpp.autosave b/QtHttpEx/ExHttp.cpp.autosave deleted file mode 100644 index dda83b2..0000000 --- a/QtHttpEx/ExHttp.cpp.autosave +++ /dev/null @@ -1,109 +0,0 @@ -#include "ExHttp.h" -#include "ui_ExHttp.h" -#include -#include -#include - -ExHttp::ExHttp(QWidget *parent) : - QMainWindow(parent), - ui(new Ui::ExHttp) -{ - ui->setupUi(this); - setWindowTitle("QNetworkAccessManager 网络管理使用 Http 协议下载"); - - m_networkManager = new QNetworkAccessManager(this); - m_reply = nullptr; - m_file = nullptr; -} - -ExHttp::~ExHttp() -{ - delete ui; -} - -//下载文件 -void ExHttp::on_btnDown_clicked() -{ - QString urlSpec = ui->lineEditUrl->text().trimmed(); //去掉字符串的首尾的空格 - if (urlSpec.isEmpty()) { - QMessageBox::information(this, "提示", "下载地址URL为NULL"); - return; - } - - QUrl url = QUrl::fromUserInput(urlSpec); - if (!url.isValid()) { - QMessageBox::information(this, "提示", QString("无效URL: %1 \n 错误信息: %2").arg(urlSpec, url.errorString())); - return; - } - - QString dir = ui->lineEditFile->text().trimmed(); - if (dir.isEmpty()) { - QMessageBox::information(this, "提示", "保存地址为空"); - return; - } - - QString fileFileName = dir + url.fileName(); //文件保存地址 + 文件名 - if (QFile::exists(fileFileName)) - QFile::remove(fileFileName); - - m_file = new QFile(fileFileName); //创建临时文件 - if (!m_file->open(QIODevice::WriteOnly)) { - QMessageBox::information(this, "提示", "打开临时文件错误"); - return; - } - - ui->btnDown->setEnabled(false); - - m_reply = m_networkManager->get(QNetworkRequest(url)); //发送get网络请求,创建网络响应 - connect(m_reply, SIGNAL(finished()), this, SLOT(onFinished())); - connect(m_reply, SIGNAL(readyRead()), this, SLOT(onReadyRead())); - connect(m_reply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(onDownloadProgress(qint64,qint64))); -} - -//默认的保存路径 -void ExHttp::on_btnFile_clicked() -{ - QString currPath = QDir::currentPath(); - QDir dir(currPath); - dir.mkdir("temp"); - - ui->lineEditFile->setText(currPath + "/temp/"); -} - -//网络响应结束 -void ExHttp::onFinished() -{ - QFileInfo fileInfo; - fileInfo.setFile(m_file->fileName()); - - m_file->close(); - delete m_file; - m_file = nullptr; - - m_reply->deleteLater(); - m_reply = nullptr; - - if (ui->checkBox->isChecked()) //勾选了,下载完成之后,打开下载的文件 //absoluteFilePath() 返回包含文件名的绝对路径。 - QDesktopServices::openUrl(QUrl::fromLocalFile(fileInfo.absoluteFilePath())); //使用默认软件的打开下载的文件 - - ui->btnDown->setEnabled(true); -} - -//读取下载的数据 -void ExHttp::onReadyRead() -{ - m_file->write(m_reply->readAll()); //将返回的数据进行读取,写入到临时文件中 -} - -//下载进程 -void ExHttp::onDownloadProgress(qint64 bytesRea, qint64 totalBytes) -{ - ui->progressBar->setMaximum(totalBytes); - ui->progressBar->setValue(bytesRea); -} - -void ExHttp::on_lineEditUrl_textChanged(const QString &arg1) -{ - ui->progressBar->setMaximum(100); - ui->progressBar->setValue(0); -}