ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

基于HTTP协议的网络应用程序

2021-09-09 17:03:42  阅读:189  来源: 互联网

标签:基于 HTTP 网络应用 void qint64 ui reply include MainWindow


#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)));
}

 

 


标签:基于,HTTP,网络应用,void,qint64,ui,reply,include,MainWindow
来源: https://www.cnblogs.com/lllion/p/15247755.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有