gpt4 book ai didi

javascript - 获取 QML LISTMODEL 中给定索引的值

转载 作者:行者123 更新时间:2023-11-29 23:46:12 24 4
gpt4 key购买 nike

我有一个如下所示的 QML ListModel:

ListModel {
id: myListModel
ListElement {myId: "1", myValue = "12"}
ListElement {myId: "2", myValue = "0"}
...
ListElement {myId: "21", myValue = "123"}
}

然后我有一些简单的 QML 标签,如下所示:

Label {
id: myLabel1
property int labelInt: 1
text: myListModel.get().myValue; //Here is my problem!
}

Label {
id: myLabel2
property int labelInt: 22
text: myListModel.get().myValue; //Here is my problem!
}

我的问题是在 myListMode.get().myValue 中填充括号。其实我需要一个条件:如果 myListModel 有一些 myId 等于我当前的 labelInt,然后返回我对应的myId,否则留空:

我试过:

myListModel.get(myListModel.get(myId = labelInt).myId).myValue;

但我不确定这是正确的方法。

你能帮帮我吗?谢谢

最佳答案

如果您追求速度,则应将您的条目映射到 myId

在 QML 中,您可以结合使用 InstantitatorJSObject 来做到这一点。

property var tracker: ({})

Instantiator {
model: tm
delegate: QtObject {
id: instDummy
property QtObject modelData: model
property string __oldID
property string myID: model.myID

onMyIDChanged: {
if (myID && __oldID !== myID) {
delete tracker[__oldID]
__oldID = myID
tracker[__oldID] = instDummy
console.log('changed', Object.keys(tracker))
}
}

Component.onCompleted: {
__oldID = myID
}
Component.onDestruction: {
console.log(__oldID, modelData.myID, delete tracker[__oldID])
console.log('removed', Object.keys(tracker))
}
}
}

解释:

Instantiator 为模型中的每个条目创建一个QtObject。此 QtObject 存储对条目模型数据的引用。 myID__oldID 这两个属性用于使 Map (JSObject) tracker 保持最新。

myID 绑定(bind)到 model.myID,因此,只要它发生变化,就会触发 myID 上的信号发生变化。现在我需要将映射中的键从旧值更改为新值。因此,我删除了键为 __oldID 的条目,然后我将 __oldID 更新为新的 myID 并将对象添加回 map ,使用新 key 。

我不想绑定(bind) __oldID,因此我在 Component.onCompleted 中分配它。

当条目被删除时,我也从 Map 中删除了对象和引用,所以我尽可能保持我的 map 干净。

添加新条目时,Instantiator 会为此自动添加一个新的QtObject


现在您可以使用 tracker[myID]O(1) 中查询您的 myIDInstantiator 负责跟踪所有更改。只有当特定行中的模型发生变化时,它才会发生变化。

请注意,此方法会消耗您的内存,因为它基本上会在 HashMap 中复制您的模型。

为避免这种情况,您可以在 C++ 中实现 ProxyModel,例如基于 QIdentityProxyModel,您向其中添加了 myID 和实际模型索引的映射。处理 dataChanged 信号以使该 map 保持最新。

PS:我希望至少 myID 是唯一的。否则,您可能会丢失一些引用资料。然后使用桶,在 map 中保留共享 myID 的多个条目

关于javascript - 获取 QML LISTMODEL 中给定索引的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43975033/

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