0

インターネットから画像のリストを取得して、QMLのリストビューに表示しようとしています。私は次のようなコードを持っています:

ListView {

    objectName: "imageListView"

    listItemComponents: [

        ListItemComponent {

            type: "item"

            Container {
                WebView {
                     url: ListItemData.imageSource
                }    
            }                           
        }
    ]
}

問題は、これにより次のエラーが発生することです:「[未定義]をQUrlURLに割り当てることができません」

ListItemData.imageSourceに正しいデータが含まれていることはわかっています。これは、WebViewの代わりにLabel {text:ListItemData.imageSource}を使用してテストしたため、必要なすべての画像URLが表示されたためです。

4

2 に答える 2

2

インターネットから画像を読み込んでいる場合でも、ImageViewを使用することをお勧めします。

まず、QNetworkRequest、QNetworkAccessManager、およびQNetworkReplyクラスを使用してネットワーク要求を行い、応答を取得すると、ImageViewでそのQByteArrayをロードします。

QNetworkAccessManager* netManager = new QNetworkAccessManager();
if (netManager) {

QUrl url(ImageUrl);
QNetworkRequest networkRequest(url);
QNetworkReply* networkReply = netManager->get(networkRequest);
connect(networkReply, SIGNAL(finished()), this, SLOT(onReply()));
}

&onReply()スロットでは、次のように画像をロードできます。

void App::onReply(QNetworkReply* reply) {
if (reply->error() != QNetworkReply::NoError) {
    qDebug() << "Image not available or any error";
    return;
}

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

}

画像が大きすぎる場合は、画像をカスケードImageViewに読み込むために、ImageDataクラスとそのメソッドが必要になる場合があることに注意してください。setImageメソッドを使用して画像を直接ロードすることはありません。&これをListViewで機能させるには、独自のCustomItemとListItemProviderを作成し、そのupdateitemメソッドをオーバーライドする必要があります。お役に立てれば。

于 2012-10-17T12:59:03.303 に答える
0

わかりました-それで私は別の解決策を見つけました。Beta2SDKからBeta3SDKにアップグレードしました。それから私は単にこのようなことをしました:

#include <QObject>
#include <bb/cascades/Image>

class MyImageClass : public QObject, public bb::cascades::Image
{
    Q_OBJECT

    Q_PROPERTY(bb::cascades::Image image READ image WRITE setImage NOTIFY imageChanged FINAL)

    //...
    bb::cascades::Image image_;
public:
    //...
    bb::cascades::Image image() const {return image_;}

    void setImage(bb::cascades::Image image {
         image_ = image;
         emit imageChanged();
    }

signals:
    //...
    void imageSourceChanged();
}

次に、画像をリストに挿入するときに、次のように使用しました。

groupDataModel_.insert(myImageObject);

そして私のqmlには:

ListView {
    id: imageListView
objectName: "ImageListView"         

    listItemComponents: [
    ListItemComponent {
        type: "item"

        Container {
            id: imagesRoot
            objectName: "ImagesRoot"

                ImageView {
                image: ListItemData.image
            }
        }
    }
    ]
}
于 2012-10-24T20:15:46.490 に答える