2012-12-23 90 views
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); 
    } 
} 

我的保存有問題。 bool1true,但是bool2false。我爲名稱使用url路徑的原因是爲圖像生成唯一的名稱。當我打印出來的名字,它是這樣的:

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

所以我的問題是:

  1. 我在做什麼錯的QImage?
  2. 我可以使用QFile和QStream來寫下圖像嗎?
+1

該目錄是否已經存在? – Mat

+0

呃...不,我只是創建文件夾,它似乎完美...我是個白癡......不過謝謝!順便說一句,你可以寫它作爲一個答案,並且我可以接受它。 – mrz

+1

順便說一句,不,你不需要使用QImage。 – Mat

回答