1

请帮我解决一下这个。

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

      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 替换为其他图像。我该怎么做..?

4

1 回答 1

0

您需要做的是:您应该影响 的属性,而不是影响assets:///image.png您的,默认情况下将其初始化为。完成后,当您获取图像时,您只需修改数据项的属性。StandardListItemListItemDataassets:///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
    }

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

于 2013-07-30T12:43:29.270 回答