Qt HTTP下载数据

添加头文件:

cpp 复制代码
#include    <QNetworkAccessManager>
#include    <QNetworkReply>
#include    <QUrl>
#include    <QDesktopServices>

创建对象:

cpp 复制代码
QNetworkAccessManager networkManager;//网络管理
    QNetworkReply *reply;   //网络响应
    QFile *downloadedFile;//下载保存的临时文件

输入url地址:

cpp 复制代码
QUrl newUrl = QUrl::fromUserInput(urlSpec);//URL地址
复制代码
创建临时文件:
cpp 复制代码
downloadedFile =new QFile(fullFileName);
if (!downloadedFile->open(QIODevice::WriteOnly))
    {
        QMessageBox::information(this, tr("错误"),"临时文件打开错误");
复制代码
发送请求,创建网络响应:
cpp 复制代码
reply = networkManager.get(QNetworkRequest(newUrl));

连接信号与槽:

cpp 复制代码
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)));


void MainWindow::on_finished()
{//网络响应结束
    QFileInfo fileInfo;
    fileInfo.setFile(downloadedFile->fileName());

    downloadedFile->close();
    delete downloadedFile;
    downloadedFile = Q_NULLPTR;

    reply->deleteLater(); //
    reply = Q_NULLPTR;

    if (ui->checkOpen->isChecked())//打开下载的文件
        QDesktopServices::openUrl(QUrl::fromLocalFile(fileInfo.absoluteFilePath()));

    ui->btnDownload->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);
}
相关推荐
2401_841495642 小时前
【数据结构】B+树
数据结构·数据库·c++·b+树·概念·结构·操作原理
稚南城才子,乌衣巷风流3 小时前
函数:编程中的核心概念
开发语言·前端·javascript
阿米亚波3 小时前
【C++】流式数据输入处理(不完全整理)
开发语言·c++·笔记
大模型码小白4 小时前
JAVA 集合框架进阶:List 与 Set 的深度解析与实战
java·开发语言·人工智能·windows·语言模型·list·ai编程
Hardworking6664 小时前
第7章 软硬件系统集成
数据库·软硬件系统集成
名字还没想好☜4 小时前
Go 的 time.Ticker 陷阱:定时任务里被忽略的内存泄漏与正确关闭
java·数据库·golang·go·定时器
皓月斯语5 小时前
【C++基础】三目运算符
开发语言·数据结构·c++
熊猫钓鱼>_>5 小时前
Redis 突发缓存穿透:一次完整的定位复盘
数据库·人工智能·redis·缓存·ai·agent·智能
初願致夕霞5 小时前
C++懒汉单例设计详解
服务器·开发语言·c++
脱胎换骨-军哥5 小时前
C++分布式系统设计:从通信引擎到分布式共识
开发语言·c++·分布式