Как получить веб-представление в виде списка в Blackberry Cascades, QML & amp; C ++, QT

Я пытаюсь получить список изображений из Интернета, чтобы показать их в виде списка в QML. У меня есть код, который выглядит так:

ListView {

objectName: "imageListView"
listItemComponents: [

ListItemComponent {

type: "item"
Container {
WebView {
url: ListItemData.imageSource
}
}
}
]
}

Проблема в том, что это просто вызывает следующую ошибку: «Невозможно назначить [undefined] для URL-адреса QUrl»

Я знаю, что ListItemData.imageSource содержит правильные данные, потому что я протестировал их, используя Label {text: ListItemData.imageSource} вместо WebView, и он показал все URL-адреса изображений, которые необходимы.

0

Решение

Я бы предложил вам использовать ImageView, даже если вы загружаете изображения из Интернета.

Прежде всего, сделайте сетевой запрос, используя классы QNetworkRequest, QNetworkAccessManager и QNetworkReply & при получении ответа загрузите этот QByteArray в ImageView.

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);

}

Обратите внимание, что если изображение слишком большое, вам может понадобиться класс ImageData & его метод для загрузки изображения в каскад ImageView. Он не будет загружать изображение напрямую с помощью метода setImage. & чтобы сделать это с ListView, вы должны создать свой собственный CustomItem & ListItemProvider & также необходимо переопределить метод обновления элемента этого. Надеюсь это поможет.

2

Другие решения

Хорошо, так что я нашел другое решение. Я обновил Beta 2 SDK до Beta 3 SDK. Тогда я просто сделал что-то вроде этого:

#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
}
}
}
]
}
0