1
我正在嘗試編寫一個使用Qt/C++從web下載圖片的應用程序。該程序將提供一個URL列表作爲文本文件,並應打開每個URL並下載每個網站中的所有圖像。Qt - 從網上下載圖片
爲了做到這一點,我子類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中來臨。當QNetworkReply完成時,我已經在clsNR中連接了一個插槽以保存圖像。它看起來像:
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來寫下圖像嗎?
該目錄是否已經存在? – Mat
呃...不,我只是創建文件夾,它似乎完美...我是個白癡......不過謝謝!順便說一句,你可以寫它作爲一個答案,並且我可以接受它。 – mrz
順便說一句,不,你不需要使用QImage。 – Mat