2012-10-18 89 views
1

我試圖下載黑莓瀑布圖,C++,QT中的圖像。試圖下載黑莓瀑布圖QT和QML

void MyClass::download() { 

    QUrl url(imagePath); 
    QNetworkRequest request(url); 
    Q_ASSERT(connect(networkAccessManager_, SIGNAL(finished(QNetworkReply *)), this, SLOT(saveImage(QNetworkReply *)))); 

    networkAccessManager_->get(request); 

} 

void MyClass::saveImage(QNetworkReply *) { 
    QByteArray imageData = reply->readAll(); 

    if (reply->error() != QNetworkReply::NoError) { 
     qDebug() << "an error occured downloading the image"; 
     return; 
    } 

    qDebug() << imageData; 
    //... 

當我這樣做,爲imageData只包含:我基本上使用的代碼看起來像這樣

「ÿÃ~ÿÃ,而不是圖像的全部內容,我下載。

有人可以解釋這樣對我?我怎樣才能使這項工作?

回答

0

其實我覺得像被下載。我認爲只有幾個字節被下載,但實際上它不過是幾個字節 - 這就是爲什麼在用qDebug打印出來時沒有結尾報價(整個圖像只在一行上)。

0

你可能要檢查,看看是否QNetworkReply您重定向到實際的圖像。如果是這樣,您將收到一個新的QUrl將用於獲得新的請求。查看文檔fo [R QNetworkRequest::Attributes

void MyClass::saveImage(QNetworkReply *reply) { 
    QUrl redirect = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl(); 
    if(redirect.isValid()) { 
     QNetworkRequest request(redirect); 
     networkAccessManager_->get(request); 
    } 
    else { 
     QByteArray imageData = reply->readAll(); 

     if (reply->error() != QNetworkReply::NoError) { 
      qDebug() << "an error occured downloading the image"; 
      return; 
     } 

     qDebug() << imageData; 
    } 
} 
+0

謝謝。我試過了,但它沒有重定向。 – user1296259

3

其在QByteArray中的形式,這就是爲什麼它顯示這樣。只需將它傳遞給Image的構造函數,如下所示:

Image image = Image(reply->readAll()); 
imageView->setImage(image); 

它應該工作。如果不這樣做,Image會太大而不適合ImageView。可以通過級聯ImageView處理的圖像的最大尺寸是2048.因此,您可能必須使用ImageData類將大圖像複製爲級聯ImageView。

也嘗試從這個url加載圖片它爲我這個url沒有任何使用的ImageData類

+0

Thankyou,但我仍然得到「我的字節數組」,當我嘗試將其放入圖像,我得到此編譯器錯誤消息:錯誤:沒有匹配函數調用'bb :: cascades :: Image :: Image(QByteArray&)' – user1296259

+0

好吧,我想你正在測試beta 2 SDK,在這個Image類沒有一個構造函數接受QByteArray作爲參數,所以你必須使用QByteArray創建QImage,然後必須使用QPainter&PixelBufferData類來操縱QImage 我強烈建議你儘快切換到Beta 3 SDK,當我切換時遇到了很多問題,因爲很多事情被改變了,我的努力被浪費了。 PixelBufferData類已被棄用,並且自Beta 3以來已由ImageData類取代。 –

+0

如果您仍想使其適用於測試版2,那麼可以參閱本教程:http:// supportforu ms.blackberry.com/t5/Cascades-Development-Knowledge/Using-QImage-and-QPainter-to-Prepare-a-cascades-Image/ta-p/1809841 –