Qt - 从网络下载图像

Posted

技术标签:

【中文标题】Qt - 从网络下载图像【英文标题】:Qt - Download Images from web 【发布时间】:2012-12-23 07:53:14 【问题描述】:

我正在尝试使用 Qt/C++ 编写一个应用程序来从 Web 下载图像。该程序将以文本文件的形式提供 URL 列表,并应打开每个 URL 并下载每个网站中的所有图像。

为此,我将 QNetworkAccessManager 子类化并覆盖 createRequest 方法/函数,如下所示:

QNetworkReply* clsNAM::createRequest(Operation op,const QNetworkRequest & req,
                                                    QIODevice * outgoingData )

    return new clsNR(QNetworkAccessManager::createRequest(_op,_req,_outgoingData));

我的 QNetworkReply 类 clsNR 的子类从其原始标头中识别回复的类型,例如:

bool clsNR::isImage()

    if(this->rawHeader("Content-Type").toLower().startsWith("image"))
       return true;
    else
       return false;

当我得到 readyRead 信号(这意味着有数据可供读取)时,我将传入的数据存储在 QbyteArray 中。我在 clsNR 中连接了一个插槽以在 QNetworkReply 完成时保存图像。它看起来像:

void clsNR::slotCloseConnection()

    if(isImage())
    
      QImage image;
      bool bool1 = image.loadFromData(ContentData);
      QString name(QDir::homePath());
      name.append(this->url().path());
      bool bool2 = image.save(name,0,-1);
    

我的储蓄有问题。 bool1true,但 bool2false。我使用 url 路径作为名称的原因是为图像生成唯一名称。当我打印出名称时,它类似于:

"/home/guest/images/splash/3.jpg"

所以我的问题是:

    我在使用 QImage 时做错了什么? 我可以改用 QFile 和 QStream 来记录图像吗?

【问题讨论】:

该目录是否已经存在? 嗯...不,我只是创建了文件夹,它似乎工作得很好...我是个白痴...不过谢谢!顺便说一句,你可以把它写成答案,我可以接受。 顺便说一句,不,你不需要使用 QImage。 【参考方案1】:

我会添加其他内容,就像 Mat 在您的评论中所说的那样。如果您需要检查目录是否存在,请使用Qdir::exists(),如果您需要创建它,请使用QDir::mkdir()

【讨论】:

以上是关于Qt - 从网络下载图像的主要内容,如果未能解决你的问题,请参考以下文章

从 Firebase 存储网络下载图像 - vuejs

在android中从网络下载图像数据的最佳方法是啥

从网络下载图像到照片应用程序 AFNetworking 3

专门用于下载图像和文件的网络爬虫

从网络访问管理器获取的 QT 显示图像

Qt 官方示例 | 网络入门 | http 下载小工具