我正在尝试使用 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);
}
}
我的储蓄有问题。bool1
是true
,但是bool2
是false
。我使用 url 路径作为名称的原因是为图像生成唯一名称。当我打印出名称时,它类似于:
"/home/guest/images/splash/3.jpg"
所以我的问题是:
- QImage 我做错了什么?
- 我可以使用 QFile 和 QStream 来写下图像吗?