#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QFile>
#include <QDir>
#include <QMessageBox>
#include <QDesktopServices>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
QNetworkAccessManager networkManager; //网络管理
QNetworkReply *reply; //网络响应
QFile *downloadedFile; //下载保存的临时文件
private slots:
void on_finished();
void on_readyRead();
void on_downloadProgress(qint64 bytesRead ,qint64 totalBytes);
void on_pushButton_2_clicked();
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->progressBar->setValue(0);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_finished()
{
QFileInfo fileInfo;
fileInfo.setFile(downloadedFile->fileName());
downloadedFile->close();
delete downloadedFile;
downloadedFile = Q_NULLPTR;
reply->deleteLater();
reply = Q_NULLPTR;
if(ui->checkBox->isChecked())
{
QDesktopServices::openUrl(QUrl::fromLocalFile(fileInfo.absoluteFilePath()));
ui->pushButton->setEnabled(true);
}
}
void MainWindow::on_readyRead()
{
downloadedFile->write(reply->readAll());
}
void MainWindow::on_downloadProgress(qint64 bytesRead, qint64 totalBytes)
{
ui->progressBar->setMaximum(totalBytes);
ui->progressBar->setValue(bytesRead);
}
void MainWindow::on_pushButton_2_clicked()
{
//缺省路径
QString curPath = QDir::currentPath();
QDir dir(curPath);
QString sub = "temp";
dir.mkdir(sub);
ui->lineEdit_2->setText(curPath+"/"+sub+"/");
}
void MainWindow::on_pushButton_clicked()
{
//下载
QString urlSpec =ui->lineEdit->text().trimmed();
if(urlSpec.isEmpty())
{
QMessageBox::information(this,"错误","请指定需要下载的URL");
return;
}
QUrl newurl = QUrl::fromUserInput(urlSpec);
if(!newurl.isValid())
{
QMessageBox::information(this,"错误",QString("无效URL:%1\n错误信息:%2").arg(urlSpec,newurl.errorString()));
return;
}
QString tempDir = ui->lineEdit_2->text().trimmed();
if(tempDir.isEmpty())
{
QMessageBox::information(this,"错误","请指定保存下载文件的路径");
return;
}
QString fullFileName = tempDir +newurl.fileName();
if(QFile::exists(fullFileName))
{
QFile::remove(fullFileName);
}
downloadedFile = new QFile(fullFileName);
if(!downloadedFile->open(QIODevice::WriteOnly))
{
QMessageBox::information(this,"错误","临时文件打开错误");
return;
}
ui->pushButton->setEnabled(false);
reply = networkManager.get(QNetworkRequest(newurl));
connect(reply,SIGNAL(finished()),this,SLOT(on_finished()));
connect(reply,SIGNAL(readyRead()),this,SLOT(on_readyRead()));
connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(on_downloadProgress(qint64,qint64)));
}