我正在尝试使用Qt / C ++编写一个应用程序来从网上下载图像。该程序将提供一个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;
}
当我准备好阅读信号(这意味着有可供读取的数据)时,我将进入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);
}
}
我的保存有问题。 bool1
为true
,但bool2
为false
。我使用名称的url路径的原因是为图像生成唯一的名称。当我打印出名称时,它就像是:
"/home/guest/images/splash/3.jpg"
所以我的问题是:
答案 0 :(得分:0)
我会添加其他内容,就像Mat在评论中说的那样。如果您需要检查目录是否存在,请使用Qdir::exists(),如果您需要创建目录,请使用QDir::mkdir()