C++ 在Qt中具有不同模型的另一个listview的委托中访问listview模型数据

C++ 在Qt中具有不同模型的另一个listview的委托中访问listview模型数据,c++,qt,model,qml,C++,Qt,Model,Qml,问题是: 我在QML中有两个ListVIEW,它们都有基于C++的基于QuastistListMultudio.c/P>的模型实现。 例如,假设两个ListView只有两个角色,颜色和大小,这两个角色都是动态的,可以通过一些外部数据输入(即tcp客户端)进行更改。 第二个listview中的每个项目都与第一个项目相关,其中第二个listview中的任何元素都将包含第一个listview中一个元素的索引。 第二个listview不仅要显示它自己的角色,还要显示来自第一个listview的元素的颜色

问题是: 我在QML中有两个ListVIEW,它们都有基于C++的基于QuastistListMultudio.c/P>的模型实现。 例如,假设两个ListView只有两个角色,颜色和大小,这两个角色都是动态的,可以通过一些外部数据输入(即tcp客户端)进行更改。 第二个listview中的每个项目都与第一个项目相关,其中第二个listview中的任何元素都将包含第一个listview中一个元素的索引。 第二个listview不仅要显示它自己的角色,还要显示来自第一个listview的元素的颜色和大小,它的索引是存储的

如何在第二个listview中动态更新此值

我已经添加了一些setter和getter,可以在第一次实例化第二个listview时填充数据,但是在这之后,对第一个listview中的属性的任何更改都不会显示在第二个listview中,因为此listview没有连接到第一个列表中的数据,并且在数据更新时不会更新

更具体地说,问题是如何将这两者联系起来?最好不更新整个第二个listview,而只更新连接到第一个列表中的更改元素的委托


如果这个文本示例令人困惑,我可以尝试编写一些代码来进一步解释。

您的学员可以在ListView中访问自己的
索引,您可以使用其他人的ListView
itemAtIndex
功能

将所需的模型数据角色与第一个列表的委托中的属性绑定,并在第二个列表委托中使用该属性,即

// In the delegate of the first listview, named firstList
property text nameBind: name


我用我在评论中写的东西尝试了上面的答案,使用了itemAtIndex,但是当新数据到达时,这不会更新第二个列表中的属性

我通过在第二个列表的委托中创建一个函数来实现这一点,该函数在第一个列表的contentItem的子项中搜索,然后从那里绑定角色,如下所示:

function getDelegateInstanceAt(index) {
                    var len = cameraList.contentItem.children.length;
                    if(len > 0 && index > -1 && index < len) {
                        return cameraList.contentItem.children[index];
                    } else {
                        return undefined;
                    }
                }
property text firstListName: getDelegateInstanceAt(storedFirstListIndex).name
函数getDelegateInstanceAt(索引){ var len=cameraList.contentItem.children.length; 如果(len>0&&index>-1&&index
在这种情况下,您必须向其添加一个属性,比如可以访问的“itemData”(
model
因名称冲突而不可用)。如果是这样,您也可以将该索引用于模型本身。我使用itemAtIndex进行了尝试,并且必须向我的每个模型角色添加属性绑定,但它可以工作,通过在我的第一个列表中添加委托“property bool colorCopy:color”。然后在我的第二个列表委托中使用firstList.itemAtIndex(storedIndex.colorCopy)访问它。如果你编辑的话会设置为解决方案(或者我可以这样做,基本上是用Amfasis注释),实际上将它绑定到第二个列表中的另一个属性不会使它在新数据上更新,似乎每次我都要用itemAtIndex调用整个函数。最后我找到了答案,我的解决方案的迭代不是这个解决方案。这将不起作用,所以我将删除我的编辑并自己回答。这是否回答了您的问题?对我来说,这并不能真正解决问题,而且选择的答案在如何实现方面也相当模糊。下面的答案是部分答案,因此我们将进行一些编辑。
function getDelegateInstanceAt(index) {
                    var len = cameraList.contentItem.children.length;
                    if(len > 0 && index > -1 && index < len) {
                        return cameraList.contentItem.children[index];
                    } else {
                        return undefined;
                    }
                }
property text firstListName: getDelegateInstanceAt(storedFirstListIndex).name