#include
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
#include
//①前置声明
class QFile;
class QNetworkReply;
class QNetworkAccessManager;
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void startRequest(QUrl url); //声明一个公有的响应函数接收URL
private slots:
//③声明槽
void httpFinished();
void httpReadyRead();
void updateDataProgress(qint64,qint64);
void on_pushButton_clicked();
private:
//②定义私有变量
QNetworkAccessManager *manager;
Ui::MainWindow *ui;
QNetworkReply *reply;
QUrl url;
QFile *file;
};
#endif // MAINWINDOW_H#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
#include
#include
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); manager = new QNetworkAccessManager(this); //创建一个网络管理实例manager ui->progressBar->hide(); //隐藏进度条 } MainWindow::~MainWindow() { delete ui; } void MainWindow::startRequest(QUrl url) { reply = manager->get(QNetworkRequest(url)); connect(reply,SIGNAL(readyRead()),this,SLOT(httpReadyRead())); connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(updateDataProgress(qint64,qint64))); connect(reply,SIGNAL(finished()),this,SLOT(httpFinished())); } //下载完成,隐藏进度条,关闭文件 void MainWindow::httpFinished() { ui->progressBar->hide(); file->flush(); file->close(); reply->deleteLater(); reply=0; delete file; file=0; } //读取准备好,进行读取文件到file中 void MainWindow::httpReadyRead() { if(file) file->write(reply->readAll()); } //下载过程中,激活进度条动态显示 void MainWindow::updateDataProgress(qint64 bytesRead, qint64 totalBytes) { ui->progressBar->setMaximum(totalBytes); ui->progressBar->setValue(bytesRead); } void MainWindow::on_pushButton_clicked() { QDir *temp = new QDir; //获取QDir的地址,不是复制一个QDir //判断文件夹是否存在 bool exist = temp->exists("./download"); if(exist) QMessageBox::warning(this,tr("creat folder"),tr("The folder is exist!")); else { bool ok = temp->mkdir("./download"); //当文件夹不存在时进行创建 if(ok) QMessageBox::warning(this,tr("creat folder"),tr("Creat the folder successful")); } //从lineEdit获取URL地址 url = ui->lineEdit->text(); QFileInfo info=(url.path()); qDebug()<
open(QIODevice::WriteOnly)) { qDebug()<<"file open error"; delete file; file=0; return; } startRequest(url); //获取url ui->progressBar->setValue(0); //设置进度条值从0开始 ui->progressBar->show(); //显示进度条 }
QT http练习——创建一个能够下载URL资源的UI程序,并保存到本地指定目录下
最新推荐文章于 2023-05-26 16:45:05 发布