#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QMessageBox>
#include <QFileDialog>
#include <QFileInfo>
#include <QDebug>
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
setWindowTitle(QStringLiteral("HTTP下载工具"));
ui->mainToolBar->hide();
m_pReply = nullptr;
m_bytesTotal = 0;
m_pManager = new QNetworkAccessManager(this);
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(saveAsFile()));
}
MainWindow::~MainWindow()
{
if (m_pReply && m_pReply->isOpen()) {
disconnect(m_pReply, SIGNAL(finished()), this, SLOT(onFinished()));
m_pReply->close();
}
if (m_file.isOpen()) {
m_file.close();
}
delete ui;
}
void MainWindow::saveAsFile()
{
m_url.setUrl(ui->lineEdit->text());
if (!m_url.isValid()) {
QMessageBox::critical(this, QStringLiteral("错误"), QStringLiteral("文件路径错误!"));
return;
}
QFileInfo info(ui->lineEdit->text());
QString fileName = QFileDialog::getSaveFileName(this, QStringLiteral("保存到"), ui->lineEdit->text(), info.suffix());
if (fileName.isEmpty()) {
return;
}
m_file.setFileName(fileName);
if (!m_file.open(QIODevice::WriteOnly)) {
QMessageBox::critical(this, QStringLiteral("错误"), QStringLiteral("本地文件创建失败!"));
return;
}
ui->progressBar->setValue(0);
downLoad();
ui->pushButton->setEnabled(false);
ui->lineEdit->setEnabled(false);
}
void MainWindow::readData()
{
m_file.write(m_pReply->readAll());
}
void MainWindow::onDownloadProgress(qint64 bytesReceived, qint64 bytesTotal)
{
ui->progressBar->setMaximum(bytesTotal);
ui->progressBar->setValue(bytesReceived);
m_bytesTotal = bytesTotal;
double total = (double)bytesTotal / (1024 * 1024);
double bytes = (double)bytesReceived / (1024 * 1024);
double speed = bytes / (m_time.elapsed() / 1000);
ui->statusBar->showMessage(QStringLiteral("总大小:%2MB - 已下载 %1MB - 速度: %3 MB/s").arg(bytes).arg(total).arg(speed));
}
void MainWindow::onFinished()
{
m_file.flush();
m_file.close();
m_pReply->deleteLater();
m_pReply = nullptr;
ui->pushButton->setEnabled(true);
ui->lineEdit->setEnabled(true);
double total = (double)m_bytesTotal / (1024 * 1024);
ui->statusBar->showMessage(QStringLiteral("总大小:%2MB - 已下载 %1MB - 速度: %3 MB/s").arg(total).arg(total).arg(0));
QMessageBox::information(this, QStringLiteral("提示"), QStringLiteral("下载完成!"));
}
void MainWindow::downLoad()
{
m_pReply = m_pManager->get(QNetworkRequest(m_url));
connect(m_pReply, SIGNAL(readyRead()), this, SLOT(readData()));
connect(m_pReply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(onDownloadProgress(qint64, qint64)));
connect(m_pReply, SIGNAL(finished()), this, SLOT(onFinished()));
m_time.start();
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
QNetworkAccessManager-Http.zip (8个子文件)
HttpDownload
mainwindow.h 773B
HttpDownload.pro.user 19KB
mainwindow.cpp 3KB
app.ico 4KB
main.cpp 183B
mainwindow.ui 2KB
HttpDownload.pro 413B
HttpDownload.pro.user.fc4f538.3.3-pre1 18KB
共 8 条
- 1
资源评论
一律清风
- 粉丝: 1051
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 5uonly.apk
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
- 林周瑜-论文.docx
- 基于MIC+NE555光敏电阻的声光控电路Multisim仿真原理图
- 基于JSP毕业设计-基于WEB操作系统课程教学网站的设计与实现(源代码+论文).zip
- 基于LM324和LM386的音响放大器Multisim仿真+PCB电路原理图
- Python机器学习与数据挖掘环境配置与库验证
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功