gpt4 book ai didi

javascript - 如何在 QML 中访问 ListView 的 ListModel 的 ListElement 的映射委托(delegate)数据?

转载 作者:数据小太阳 更新时间:2023-10-29 04:37:27 27 4
gpt4 key购买 nike

本质上,我有一个普通的 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
}
}

请忽略我可能通过 chop 代码以专注于重要内容而引入的任何问题。

无论如何,现在我的问题是我想访问 ListElement 的指定委托(delegate)并查看 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);
}

唉,这似乎没那么容易。

感谢帮助。

最佳答案

您不能以这种方式访问​​委托(delegate),因为它们是 transient 对象,由 ListView 自行决定创建和销毁。如 documentation 中所述对于代表:

Delegates are instantiated as needed and may be destroyed at any time. State should never be stored in a delegate.

是否有特殊原因导致您不能向 ListModel 添加 textEnabled 标志?例如:

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

}
}

关于javascript - 如何在 QML 中访问 ListView 的 ListModel 的 ListElement 的映射委托(delegate)数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9775858/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com