基本上,我有一个通常的ListView:
Rectangle {
id: mylist
ListModel {
id: mylistModel
ListElement {
text: "blah1"
}
ListElement {
text: "blah2"
}
ListElement {
text: "blah3"
}
}
Component {
id: mylistDelegate
Text {
id: mylistDelegateText
text: text
property bool mylistDelegateTextEnabled: false
}
}
ListView {
id: mylistView
model: mylistModel
delegate: mylistDelegate
}
}
请忽略我可能引入的任何问题,方法是截断代码以专注于重要事项。
无论如何,现在我的问题是我想访问ListElement的已分配委托,并查看mylistDelegateTextEnabled在javascript循环中的值。例如,这个循环遍历当前列表并给出模型中ListElements的文本:
for(var i = 0; i < mylistModel.count; ++i) {
console.log(mylistModel.get(i).text);
}
这显然很好。
现在我想要的就是这个:
for(var i = 0; i < mylistModel.count; ++i) {
console.log(mylistModel.get(i).text);
console.log(mylistModel.get(i).delegate.mylistDelegateTextEnabled);
}
唉,它似乎并不那么容易。
帮助表示赞赏。
答案 0 :(得分:7)
您无法以这种方式访问委托,因为它们是瞬态对象,由ListView
自行决定创建和销毁。正如代表documentation中所述:
代表会根据需要进行实例化,并且可能随时被销毁。 国家不应该存储在代表中。
是否有一个特殊原因导致您无法向textEnabled
添加ListModel
标记?例如:
import QtQuick 1.0
Rectangle {
id: mylist
width:300
height:300
ListModel {
id: mylistModel
ListElement {
name: "blah1"
textEnabled:false
}
ListElement {
name: "blah2"
textEnabled:false
}
ListElement {
name: "blah3"
textEnabled:false
}
}
Component {
id: mylistDelegate
Text {
id: mylistDelegateText
text: name
color: textEnabled?"red":"black"
MouseArea {
anchors.fill:parent;
onClicked: {
mylistModel.setProperty(index, "textEnabled", !textEnabled);
}
}
}
}
ListView {
id: mylistView
model: mylistModel
delegate: mylistDelegate
width:100;
height:100
}
}
答案 1 :(得分:2)
试试这段代码: -
for (var i = 0; i < mylistView.count; i ++) {
// this will get list item at index i
console.log(mylistView.contentItem.children[i]);
// lets set it height to 100
mylistView.contentItem.children[i].height=100;
}
希望这有帮助, 干杯!!! @navi