【问题标题】:How do I get a web view in a list view in Blackberry Cascades, QML & C++, QT如何在 Blackberry Cascades、QML 和 C++、QT 的列表视图中获取 Web 视图
【发布时间】: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。

【问题讨论】:

    标签: c++ qt listview qml blackberry-10


    【解决方案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
                }
            }
        }
        ]
    }
    

    【讨论】:

      猜你喜欢
      • 2012-09-20
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多