Qt -从网络下载图像

Qt - Download Images from web

本文关键字:下载 图像 网络 Qt      更新时间:2023-10-16

我正在尝试使用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"

所以我的问题是:

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

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