请帮助我。
我在QML文件中创建了一个ListView,并用从webservice收到的数据填充它。由于这个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替换为其他图像。我该怎么做..?
答案 0 :(得分:0)
您需要做的是:不应影响assets:///image.png
StandardListItem
,而应影响ListItemData
的属性,默认情况下会将其初始化为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
}
现在,当您加载图片时,请在setImage
上用DataElement
调用{{1}},并相应地刷新视图。