Qt示例-Download

6 篇文章 0 订阅
4 篇文章 0 订阅

简介

  一个简单的http下载器,可以批量下载文件,保存到指定目录,类似浏览器的下载功能

演示

在这里插入图片描述

代码解释

  这次的下载器代码比较核心代码比较简单,暂时只使用到了如下几个类

QNetworkReply
QNetworkRequest
QNetworkAccessManager
  1. 使用get方法请求下载文件

    //调用该函数可以实现下载功能
    ReplyData DownloadManager::doDownload(const QUrl &url)
     {
         QNetworkRequest request(url);
         //QNetworkAccessManager使用get请求数据 
         QNetworkReply *reply = manager->get(request);
         //将返回的QNetworkReply和要下载的文件路径返回给ui类,方便进度条处理
         ReplyData date = {saveFileName(url), reply};
         return date;
     }
    
  2. 检查下载进度

    //QMap<QNetworkReply*, QProgressBar*>  replyMap;
    //
     ReplyData replyData = manager.doDownload(url);
     QProgressBar* proBar = new QProgressBar;
     //设置进度条显示文字
     proBar->setFormat(replyData.fileName + "已下载%p%");
     //当下载数据更新时QNetworkReply会发出downloadProgress信号
     connect(replyData.reply, &QNetworkReply::downloadProgress,
     		this, &Win::downloadProgress);
    
  3. 保存数据

    //将数据保存在本地
    //QNetworkAccessManager下载完毕后会发出finished信号,接收该信号,保存数据
    
    connect(manager, SIGNAL(finished(QNetworkReply*)),
    		SLOT(downloadFinished(QNetworkReply*)));
    
    void DownloadManager::downloadFinished(QNetworkReply *reply)
    {
        QUrl url = reply->url();
        QString filename = saveFileName(url);
        qDebug()<<filename<<endl;
        if (saveToDisk(filename, reply))
        {
                qDebug()<<"保存成功"<<endl;
        }
        reply->deleteLater();//要使用deleteLater进行删除,否则有问题
    }
    
    bool DownloadManager::saveToDisk(const QString &filename, QIODevice *data)
    {
        QFile file(filename);
        if (!file.open(QIODevice::WriteOnly)) {
            return false;
        }
        file.write(data->readAll());
        file.close();
        return true;
    }
    

注意事项

  1. 在接收到QNetworkAccessManagerfinished信号后,删除QNetworkReply对象时要使用deleteLater()方法
  2. 要保证程序运行期间QNetworkAccessManager没有被析构,否则无法接收finished信号
  3. 在线程中处理QNetworkAccessManagerfinished信号时,要启用消息循环,否则无法接收finished信号
  4. linux下换行符为\n, windows下换行符为\r\n

源码

源代码

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt是一种广泛使用的跨平台应用程序框架。本文将介绍如何在Ubuntu 18.04上交叉编译Qt 5.12.7的详细教程。 第一步是安装必要的依赖项。打开终端并输入以下命令: sudo apt-get update sudo apt-get install build-essential perl python git p7zip-full 接下来,你需要安装交叉编译工具链。在此示例中,我们将以ARM Cortex-A7为目标平台。 sudo apt-get install g++-arm-linux-gnueabihf libc6-armhf-cross-armel-cross binutils-arm-linux-gnueabihf 然后,创建一个新的目录并切换到该目录中,然后从Qt官方网站上下载最新的Qt源代码: mkdir qt-cross-compile && cd qt-cross-compile wget https://download.qt.io/archive/qt/5.12/5.12.7/single/qt-everywhere-src-5.12.7.tar.xz tar xvf qt-everywhere-src-5.12.7.tar.xz 接下来,创建一个称为“qt5-armhf.conf”的新文件,需要根据目标平台进行相应的更改: cd qt-everywhere-src-5.12.7/qtbase/mkspecs cp -r linux-arm-gnueabi-g++/ qt5-armhf cd qt5-armhf vi qmake.conf 确保以下行已正确配置: 将“QMAKE_CFLAGS”和“QMAKE_CXXFLAGS”修改为: QMAKE_CFLAGS = -march=armv7-a -mtune=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard --sysroot=/usr/arm-linux-gnueabihf/ QMAKE_CXXFLAGS = $$QMAKE_CFLAGS 对于“QMAKE_LINK”和“QMAKE_LINK_SHLIB”,添加以下行: QMAKE_LINK = arm-linux-gnueabihf-g++ QMAKE_LINK_SHLIB = $$QMAKE_LINK 接下来,进入Qt源代码目录并构建一个交叉编译版本: cd ../../.. ./configure -prefix /opt/qt5-armhf -static -opensource -confirm-license -release -skip webengine -skip wayland -skip qtgamepad make -j4 接下来,安装Qt到目标目录: sudo make install 完成后,你可以在目标文件夹/opt/qt5-armhf找到已安装的Qt库。现在你可以使用Qt Creator或手动创建项目并在Ubuntu 18.04中进行交叉编译。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值