基本上,我有一个通常的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
}
}
Run Code Online (Sandbox Code Playgroud)
请忽略我可能通过截断代码以关注重要内容而引入的任何问题.
无论如何,现在我的问题是我想访问ListElement的已分配委托,并查看mylistDelegateTextEnabled在javascript循环中的值.例如,这个循环迭代当前列表并给出模型中ListElements的文本:
for(var i = 0; i < mylistModel.count; ++i) {
console.log(mylistModel.get(i).text);
}
Run Code Online (Sandbox Code Playgroud)
这显然很好.
现在我想要的基本上是这样的:
for(var i = 0; i < mylistModel.count; ++i) {
console.log(mylistModel.get(i).text);
console.log(mylistModel.get(i).delegate.mylistDelegateTextEnabled);
}
Run Code Online (Sandbox Code Playgroud)
唉,它似乎并不那么容易.
帮助赞赏.
您无法以这种方式访问委托,因为它们是由您自行决定创建和销毁的临时对象ListView.如代表文档中所述:
代表会根据需要进行实例化,并且可能随时被销毁.国家不应该存储在代表中.
有什么特别的原因你不能只为它添加一个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
}
}
Run Code Online (Sandbox Code Playgroud)