替换 Listview Blackberry 10 中的虚拟图像

Posted

技术标签:

【中文标题】替换 Listview Blackberry 10 中的虚拟图像【英文标题】:To replace a dummy image in Listview Blackberry10 【发布时间】:2013-07-29 11:04:32 【问题描述】:

请帮帮我。

我在 QML 文件中创建了一个 ListView,并用从 web 服务接收到的数据填充它。由于这个 web 服务不提供任何图像,我必须在那个地方放置一个虚拟图像。然后我使用另一种方法从 url 获取图像。现在我在我的 cpp 文件中获取了图像。但我无法更新我的列表视图。我尝试了很多方法。但失败了。 这是我的代码 sn-p。

      ListView 
            id: listView
            objectName: "listView"

            dataModel: ArrayDataModel 
                id: myListModel

            


            // Override default GroupDataModel::itemType() behaviour, which is to return item type "header"
            listItemComponents: ListItemComponent 
                id: listcomponent
                // StandardListItem is a convivience component for lists with default cascades look and feel
                StandardListItem 
                    id: stdlst
                    title: ListItemData.postText
                    description: ListItemData.postDate
                    status: ListItemData.filePath
                    imageSource: assets:///image.png
                

            
            layoutProperties: StackLayoutProperties 
                spaceQuota: 1.0
            
            horizontalAlignment: HorizontalAlignment.Fill
            verticalAlignment: VerticalAlignment.Fill

        

我需要将此列表视图中的 imagSource 替换为其他图像。我该怎么做..?

【问题讨论】:

请帮帮我...:( 【参考方案1】:

你需要做的是:你应该影响ListItemData的一个属性,而不是影响assets:///image.png到你的StandardListItem,你默认初始化为assets:///image.png。完成后,当您获取图像时,您只需修改数据项的属性。

假设您显示的课程名为DataElement

    class DataElement: public QObject 

        Q_OBJECT

        Q_PROPERTY(QString postText READ getPostText CONSTANT);
        Q_PROPERTY(QVariant image READ getImage WRITE setImage NOTIFY imageChanged);
        // Other properties here...

    public:
        DataElement() 
            _postText = "Default text";
            _image = QVariant::fromValue
                (bb::cascades::Image(QUrl("file://" + QDir::homePath() + "/image.png")));
        

        QVariant image() const 
            return _image;
        

        void setImage(QVariant image) 
            if (image != _image) 
                _image = image;
                emit imageChanged();
            
        

        // Missing methods for other properties etc

    signals:
        void imageChanged();

    private:
        QString     _postText;
        QVariant    _image;
    ;

您的ListItem 将如下所示:

    StandardListItem 
        id: stdlst
        title: ListItemData.postText
        description: ListItemData.postDate
        status: ListItemData.filePath
        image: ListItemData.image
    

现在,当您加载图像时,您可以在DataElement 上调用setImage,并相应地刷新视图。

【讨论】:

在上面的代码中,我正在填充来自 web 服务调用的 postText、postDate 和 filePath。但是由于这个 web 服务不提供任何图像,我只是在这个位置放了一个虚拟图像。我只能在调用另一个 web 服务后获取图像。获得图像 QVariant 后,我​​需要在 StandardListItem 的图像部分进行设置。那么是否可以像这样更新图像..? StandardListItem 也有一个 image 属性。您需要将此属性绑定到您的自定义属性之一(如postTextpostDatefilePath)。如您所料,它应该是QVariant 类型。在获得第二次调用 Web 服务的结果之前,您需要将自定义属性值设置为虚拟图像,然后在收到真实图像时替换它。 感谢您的回复...能否提供一个示例代码...? 如何将图像属性绑定到自定义属性...?请帮帮我...:(

以上是关于替换 Listview Blackberry 10 中的虚拟图像的主要内容,如果未能解决你的问题,请参考以下文章

BlackBerry Cascades:如何将数据加载到 ListView

Blackberry 10 Cascade:从设备读取短信

Phonegap:如何将插件(如FileSystem)添加到blackberry10?

如何使用 webworks 在 Blackberry 10 设备中获取 IMEI 号码?

IBM Worklight 6.0 - BlackBerry 10 中的 window.open() 失败

手机出现blackberry是啥意思