如何显示当前选择的 QML TreeView?
Posted
技术标签:
【中文标题】如何显示当前选择的 QML TreeView?【英文标题】:How to show current selection QML TreeView? 【发布时间】:2016-02-01 17:33:29 【问题描述】:我可以显示当前选择 QML ListView 但类似的事情在 TreeView 中不起作用。
部分问题是 TreeView 无法识别 index
,在 ListView
的情况下传递给委托。我试过styleData.index
但这也不起作用。
rowDelegate: Item
id: row_delegate
height: 40
Rectangle
id: rectid
anchors.fill: parent
MouseArea
id: mouse_area
anchors.fill: parent
onClicked:
console.log("Row clicked " + rectid.styleData.index)
输出是:
qml:点击的行未定义
【问题讨论】:
styleData
未附加到MouaeArea
,因此您的示例是错误的,并且(幸运的是)答案仍然有效。再试一次。
【参考方案1】:
正如documentation 所述,您在命名空间styleData
中有一组属性,可以在委托中用于几乎相同的目的。
例如,您可以设置作为委托的一部分的标签的文本属性,如下所示:
text: styleData.value
styleData.value
在哪里(文档摘录):
此项的值或文本
同样,你有:
styleData.pressed - 当项目被按下时为真
styleData.index - 模型中当前项目的 QModelIndex
styleData.hasChildren - 如果当前项目的模型索引有或可以有孩子,则为真
等等...请参阅文档以获取完整列表。
还要注意文档末尾的注释:
注意:出于性能原因,创建的委托可以在多个表行中循环使用。这意味着当您使用 styleData.row 或 model 等隐式属性时,这些值可能会在构建委托后发生变化。这意味着您不应假设在调用 Component.onCompleted 时内容是固定的,而应依赖于对此类属性的绑定。
【讨论】:
我更新了问题,styleData.index
在 rowDelegate 中并没有真正起作用
我猜styleData
是一个附加属性,所以你不能这样访问它,它不是你的MouseArea
的一部分。尝试给你一个矩形 id,然后通过该 id 将styleData
引用为rectId.styleData.andSoOn
。
还是不行,报错信息是“TypeError: Cannot read property 'index' of undefined”
请发布更新的 sn-p,否则我无法知道您这次要做什么以及出了什么问题。
我更新了它,如您所见,我为所有元素提供了 id 并尝试了所有元素,但结果相同。以上是关于如何显示当前选择的 QML TreeView?的主要内容,如果未能解决你的问题,请参考以下文章
带有 ExtendedSelection 的 Qml TreeView 中的 selectedRows() 落后了一步