![](/img/trans.png)
[英]How to respond to clicking on list items in a list view in qml, C++ qt, in Blackberry 10 Cascades
[英]How do I get a web view in a list view in Blackberry Cascades, QML & C++, QT
我试图从互联网上获取一个图像列表,以便在QML的列表视图中显示。 我的代码看起来像这样:
ListView {
objectName: "imageListView"
listItemComponents: [
ListItemComponent {
type: "item"
Container {
WebView {
url: ListItemData.imageSource
}
}
}
]
}
问题是这只会导致以下错误:“无法将[undefined]分配给QUrl url”
我知道ListItemData.imageSource包含正确的数据,因为我使用Label {text:ListItemData.imageSource}来测试它,代替了WebView,它显示了所需的所有图像URL。
我建议你只使用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);
}
请注意,如果图像太大,您可能必须使用ImageData类及其方法在级联ImageView中加载图像。 它不会使用setImage方法直接加载图像。 要使用ListView,你必须创建自己的CustomItem和ListItemProvider,并且还必须覆盖它的更新项方法。 希望这可以帮助。
好的 - 所以我找到了另一个解决方案 我从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
}
}
}
]
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.