feat: QNetworkAccessmanager and QNetworkReply and QNetworkRequest
提供网络协议的7层模型中的 中高层的网络协议:Http/FTP/SNMP等 ==> QNetworkAccessmanager 协调网络操作类(处理网络的请求和回应):负责发送网络请求,创建网络响应 QNetworkRequest 网络请求 QNetworkReply 网络请求的响应(提供finished()/readyRead()/downloadProgress()信号),监测网络响应的执行情况,执行相应的操作
This commit is contained in:
parent
f087fffde3
commit
f4cda11752
@ -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/");
|
||||
}
|
||||
|
||||
|
@ -1,109 +0,0 @@
|
||||
#include "ExHttp.h"
|
||||
#include "ui_ExHttp.h"
|
||||
#include <QMessageBox>
|
||||
#include <QDir>
|
||||
#include <QDesktopServices>
|
||||
|
||||
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);
|
||||
}
|
Loading…
Reference in New Issue
Block a user