2012-10-18 55 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 –