如何在 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 中,然后用鼠标滚动到该 #include 语句时,它会显示“未解决包含”,并带有黄色下划线,当我尝试编译时,有一条错误消息说该 ListItemProvider 文件不存在。 您正在开发什么操作系统? ListItemProvider 之前在 BB 10.0.6(Beta 2 SDK)中被命名为 ListItemManager。现在在 BB 10.0.9(Beta 3 SDK)中将其命名为 ListItemProvider。 谢谢,但是当我下载图片时,我只得到:'"ÿÃ~ÿÃ' from reply->readAll()【参考方案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
            
        
    
    ]

【讨论】:

以上是关于如何在 Blackberry Cascades、QML 和 C++、QT 的列表视图中获取 Web 视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Blackberry Cascades qml 和 qt 中点击列表项组件

如何在 Blackberry Cascades、QML 和 C++、QT 的列表视图中获取 Web 视图

Blackberry Cascades 上下文菜单从按钮单击

我的 Blackberry 10 Cascades(C++、Qt 和 QML)示例应用程序在启动时崩溃并出现以下错误

Blackberry 10 Cascades、qml (C++ & QT) 中的布局存在问题

BlackBerry Cascades 中的 QML 字符串