1

Blackberry Cascades、C++、QT で画像をダウンロードしようとしています。

私は基本的に次のようなコードを使用しています。

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 には、ダウンロードしたイメージのコンテンツ全体ではなく、"ãããããã のみが含まれます。

誰かが私にこれを説明できますか?どうすればこれを機能させることができますか?

4

3 に答える 3

3

QByteArray 形式であるため、そのように表示されます。次のように Image のオブジェクトのコンストラクターに渡すだけです。

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

それはうまくいくはずです。そうでない場合、Image が大きすぎて ImageView に収まりません。カスケード ImageView で処理できる画像の最大サイズは 2048 です。そのため、ImageData クラスを使用して大きな画像をカスケード ImageView に複製する必要がある場合があります。

また、このURLから画像を読み込んでみてくださいImageData クラスを使用せずに、このURL で機能します

于 2012-10-19T10:48:49.617 に答える
0

実際には画像がダウンロードされていると思います。ダウンロードされているのは数バイトだけだと思っていましたが、実際には数バイトを超えていました.qDebugで印刷したときに終了引用符が表示されなかったのはそのためです(画像全体が1行になります)。

于 2012-10-24T20:04:30.033 に答える
0

QNetworkReply が実際の画像にリダイレクトしているかどうかを確認することをお勧めします。そうであれば、新しいリクエストを取得するために使用される新しい QUrl を受け取ります。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;
    }
}
于 2012-10-18T21:03:02.820 に答える