如何在 Blackberry Cascades、QML 和 C++、QT 的列表视图中获取 Web 视图
Posted
技术标签:
【中文标题】如何在 Blackberry Cascades、QML 和 C++、QT 的列表视图中获取 Web 视图【英文标题】:How do I get a web view in a list view in Blackberry Cascades, QML & C++, QT 【发布时间】:2012-10-16 19:30:21 【问题描述】:我正在尝试从 Internet 获取图像列表以显示在 QML 的列表视图中。我的代码如下所示:
ListView
objectName: "imageListView"
listItemComponents: [
ListItemComponent
type: "item"
Container
WebView
url: ListItemData.imageSource
]
问题是这只会导致以下错误:“无法将 [undefined] 分配给 QUrl url”
我知道 ListItemData.imageSource 包含正确的数据,因为我使用 Label text: ListItemData.imageSource 代替 WebView 对其进行了测试,它显示了所有需要的图像 URL。
【问题讨论】:
【参考方案1】:我建议您仅使用 ImageView,即使您是从 Internet 加载图像。
首先,使用 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 & 还必须覆盖更新项的方法。希望这会有所帮助。
【讨论】:
谢谢,但似乎 ListItemProvider 从 cascades 文件夹中丢失了,现在我正在尝试从互联网上找到可以下载该丢失类的位置,如果有人能指出我正确的方向,它会非常感谢,谢谢。 你必须扩展 ListItemProvider 类并在 C++ 中创建你自己的自定义提供程序 是的,谢谢,我明白了,但是当我尝试将 ListItemProvider 包含在 #include好的 - 所以我找到了另一个解决方案。我从 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
]
【讨论】:
以上是关于如何在 Blackberry Cascades、QML 和 C++、QT 的列表视图中获取 Web 视图的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Blackberry Cascades qml 和 qt 中点击列表项组件
如何在 Blackberry Cascades、QML 和 C++、QT 的列表视图中获取 Web 视图
Blackberry Cascades 上下文菜单从按钮单击
我的 Blackberry 10 Cascades(C++、Qt 和 QML)示例应用程序在启动时崩溃并出现以下错误