gpt4 book ai didi

listview - 如何从 QML 中的 ListView 访问 currentItem 的角色?

转载 作者:行者123 更新时间:2023-12-02 10:25:14 25 4
gpt4 key购买 nike

我正在尝试从 QML 中的 ListView 访问角色。本质上,我的 QML 中有这个:

ListView {
id: myId
model: myModel
delegate: Item {
Text {
text: model.text
}
Text {
text: model.moreText
}
}
}

myModel 是 QAbstractListModel 实现。其中的 QML 部分是一个可重用的组件,因此该模型可以具有任意数量的具有各种数据类型的不同角色。我想做的是绑定(bind)到 ListView 的 currentItem 属性的给定角色的值。换句话说,我希望页面上有一些其他 Component ,可以将属性绑定(bind)到 ListView 中当前选定的项目,如下所示:

Text {
text: myId.currentItem.text // Or myId.currentItem.model.text (or something similar)
}

请记住,我需要这种普遍可用的方法,因为我将针对多种模型类型进行大量操作,并且我尝试不为每个模型和 ListView 编写这种自定义代码。

似乎访问当前所选项目的属性应该很简单,但据我所知这是不可能的。当只有一个角色时,模型似乎会受到不同的对待,这一事实使问题变得更加复杂。我的意思是,有时您可以通过 model.roleName 访问您的角色,而当只有一个角色时,您可以使用 modelData

如果有人有任何建议,我将不胜感激。非常感谢!

编辑

我发现了这个:

http://comments.gmane.org/gmane.comp.lib.qt.qml/1778

但是,这似乎对我不起作用。当我尝试在 QML 脚本中使用数据时,出现类型错误,并且没有可用的类型转换,因此我不知道该怎么做。欢迎任何建议!

谢谢!

jack

最佳答案

代码为 http://comments.gmane.org/gmane.comp.lib.qt.qml/1778应该可以工作,尽管如果属性名为“data”,我确实会看到错误;看起来它正在覆盖一些现有的内置属性。将其重命名为“myData”似乎可行:

ListView {
id: myId
model: myModel
delegate: Item {
property variant myData: model
Text {
text: model.text
}
Text {
text: model.moreText
}
}
}

Text { text: myId.currentItem.myData.text }

(原始帖子中的 myId.currentItem.text 代码不起作用,因为它试图引用委托(delegate)中的 text 属性,但该属性没有起作用。不存在。)

关于在委托(delegate)中引用 modelmodelData,差异取决于模型的类型,而不是模型中的角色数量。如果模型是字符串列表或对象列表,则 modelData 用于引用委托(delegate)中的单个字符串或对象(因为字符串列表和对象列表没有任何角色)。对于所有其他模型,包括 QML ListModel 和 Qt C++ QAbstractItemModel,model.role 可用于引用委托(delegate)中的角色。

关于listview - 如何从 QML 中的 ListView 访问 currentItem 的角色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5231882/

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