我对 ListModel 和 ListView 有一点问题,特别是关于 ListModel 的移动功能。我将向您展示 SDK 中包含的 DynamicList 示例的代码片段,并进行一些修改以进行调试: 代码:
Item {
property alias nameText: nameTextBox.text
id: delegateItem
width: listView.width; height: 55
clip: true
Row {
anchors.verticalCenter: parent.verticalCenter
spacing: 10
Column {
Image {
source: "content/pics/arrow-up.png"
MouseArea {
anchors.fill: parent;
onClicked: {
var voice
var nameInModel
var nameInView
voice = listView.contentItem.children[1]
nameInModel = fruitModel.get(1).name
nameInView = voice.nameText
console.log("name before move in model at 1: "+nameInModel)
console.log("name before move in list at 1: "+nameInView)
fruitModel.move(index, index-1, 1)
voice = listView.contentItem.children[1]
nameInView = voice.nameText
nameInModel = fruitModel.get(1).name
console.log("name after move in model at 1: "+nameInModel)
console.log("name after move in list at 1: "+nameInView)
}
}
}
....
因此,当单击图像“content/pics/arrow-up.png”时,模型中的一项将向上移动一个位置,现在,在示例中,有四个项按顺序排列:“Apple”-“Banana” -“Cumqat”-“Durian”,如果我单击“香蕉”上的“向上”将该项目移动到第一个位置,这是 consol.log 的结果:
移入模型 1 前的名称:香蕉 移入列表 1 前的名称:Apple 移入模型 1 后的名称:Apple 移入列表 1 后的名称:Apple
如果我点击 Apple(现在位于第二位)将其移动到第一位,就会发生这种情况:
移入型号 1 前的名称:Apple 移入列表 1 前的名称:移入型号 1 后的 Apple 名称:Banana 移入列表 1 后的名称:Apple
所以,首先很明显ListModel的第一个索引是0,而ListView的第一个索引是1,那么很明显模型中的项目已经被移动了,而列表中的项目没有。现在,这是我的问题:想象“名称”是 TextEdit 的文本,因此 ListView 委托包含一个 TextEdit,它可以由用户编辑。如果我想获取该文本,我知道我可以这样做: 代码:
for (var i = 0; i <= myListView.count; i++){
myItem= myListView.contentItem.children[i]
myName = myListView.name
但问题是,在我的 ListView 中,也可以使用 ListModel 的移动功能移动项目,但如果我移动项目并使用前一个周期取“名称”,似乎什么都没有改变(就像在动态列表示例)。另一方面,如果我使用“名称”:
myName= myListModel.get(i).name
然后,当我修改 TextEdit 中的文本并尝试使用“名称”时,似乎没有任何变化,
那么,我必须做些什么才能获得一个带有 TextEdit 的 ListView 并有可能移动我可以记录任何变化的项目?
我希望我已经清楚了,非常感谢,Giammarco