- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从 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)中引用 model 与 modelData,差异取决于模型的类型,而不是模型中的角色数量。如果模型是字符串列表或对象列表,则 modelData 用于引用委托(delegate)中的单个字符串或对象(因为字符串列表和对象列表没有任何角色)。对于所有其他模型,包括 QML ListModel 和 Qt C++ QAbstractItemModel,model.role 可用于引用委托(delegate)中的角色。
关于listview - 如何从 QML 中的 ListView 访问 currentItem 的角色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5231882/
我是一名优秀的程序员,十分优秀!