1.pro文件添加

QT       += core gui network

2.头文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QFile>
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    QNetworkAccessManager *manager;
        QNetworkReply *reply;
        QFile *myfile;
        void Init();
        void doProcessReadyRead();
        void doProcessFinished();
        void doProcessDownloadProgress(qint64,qint64);
        void doProcessError(QNetworkReply::NetworkError code);

private slots:
        void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

3.cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QFile>
#include <QMessageBox>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    Init();
}
void MainWindow::Init()
{ manager = new QNetworkAccessManager(this);
    myfile = new QFile(this);
}
MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    QNetworkRequest request;
    QString url=ui->lineEdit->text();
    request.setUrl(QUrl(url));
    reply = manager->get(request);
    connect(reply,&QNetworkReply::readyRead,this,&MainWindow::doProcessReadyRead);
    connect(reply,&QNetworkReply::downloadProgress,this,&MainWindow::doProcessDownloadProgress);
    connect(reply,QOverload<QNetworkReply::NetworkError>::of(&QNetworkReply::error),this,&MainWindow::doProcessError);
    QStringList list= url.split("/");
    QString filename = list.at(list.length()-1);
    QString file = "/home/yaoyuanpei/" + filename;
    myfile->setFileName(file);
   bool ret = myfile->open(QIODevice::WriteOnly|QIODevice::Truncate);    //创建文件
   if(!ret)
       {
       QMessageBox::warning(this,"warning","打开失败");
       return;
   }
   ui->progressBar->setValue(0);
   ui->progressBar->setMinimum(0);
}
void MainWindow::doProcessReadyRead()             //读取并写入
{
    while(!reply->atEnd())
    {
        QByteArray ba = reply->readAll();
        myfile->write(ba);
    }
}
void MainWindow::doProcessFinished()
{
    myfile->close();
}

void MainWindow::doProcessDownloadProgress(qint64 recv_total, qint64 all_total)      //显示
{
    ui->progressBar->setMaximum(all_total);
    ui->progressBar->setValue(recv_total);
    QStringList list = ui->lineEdit->text().split("/");
    QString filename = list.at(list.length()-1);
    QString data = "下载成功--" + filename;
    ui->textEdit->setText(data);
}

void MainWindow::doProcessError(QNetworkReply::NetworkError code)
{
    qDebug() << code;
}

https://www.cnblogs.com/IntelligencePointer/p/11484014.html

https://blog.csdn.net/yao_hou/article/details/98504942

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐