如何从ListView的事件处理程序访问ListView委托中的Text.text项,下面是示例代码(可能有语法错误)。
ListView {
id: mainLView
model: ListViewModel {}
delegate: Rectangle {
id: theRect
Text {
id: theText
text: ""
}
}
onMovementEnded {
//here is where I would like to access the text in Text, e.g
theText.text = "New Value"
}
}
我的代码不起作用,因为无法从事件处理程序访问该文本。如何完成文本值的设置?
编辑:为了完整性: 我可以通过java代码(在app加载期间)向ListView添加项目,通过代码
访问事件内ListView中的值mainLView.model.append({'name': "First Value","city":"London"});
var myValue = model.get(currentIndex).city // or name
但是我仍然找不到为委托文本{text:“”}赋值的方法。
编辑2 7月10日 这是我想要实现的更完整的代码示例。
ListView {
id: mainLView
model: ListModel { id: mainModel}
delegate: Rectangle {
id: theRect
Text {
id: theText
text: nameX
}
}
Component.onCompleted: {
for (var x=1; x < 99; x++) {
var data = {'nameX': "Name: " + x, "numberX":x};
mainModel.append(data);
}
}
onMovementEnded {
//here I want to set the value to numberX e.g (this does not work)
theText.text = mainView.model.get(currentIndex).numberX
}
}
答案 0 :(得分:2)
ListView有一个属性currentItem,可用于访问当前索引处的项目。要从委托访问某些内容,您的委托需要在其顶级项目中拥有属性,因为只有那些属性才会暴露给外部。这样的事情应该有效:
ListView {
id: mainLView
model: ListModel { id: mainModel}
delegate: Rectangle {
property alias text: theText.text
Text {
id: theText
text: nameX
}
}
onMovementEnded {
mainLView.currentItem.text = "foo";
}
}
答案 1 :(得分:2)
鉴于您的意见,我认为以下内容可能符合您的要求。
delegate: Rectangle {
id: theRect
Text {
id: theText
text: mainLView.moving ? nameX : numberX
}
}
这应该在ListView移动时显示其中一个值,而在不移动时显示另一个值。
答案 2 :(得分:0)
将字符串值分配给列表视图委托中的Text(Text元素)。您可以使用模型的属性名称。
喜欢以下。这里的名字来自Jason对象{'name':“First Value”,“city”:“London”});
delegate: Rectangle {
id: theRect
Text {
id: theText
text: name // or city
}
}
查看此链接(http://kunalmaemo.blogspot.kr/2011/03/creating-custom-listview-delegate-in.html),这将有所帮助。
顺便说一句,要从委托中获取文本,你需要从模型中获取它,你不能从委托中获取它,因为委托是listview中的可重用元素,它的值不断变化。