如何显示当前选择的 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,然后通过该 idstyleData 引用为rectId.styleData.andSoOn 还是不行,报错信息是“TypeError: Cannot read property 'index' of undefined” 请发布更新的 sn-p,否则我无法知道您这次要做什么以及出了什么问题。 我更新了它,如您所见,我为所有元素提供了 id 并尝试了所有元素,但结果相同。

以上是关于如何显示当前选择的 QML TreeView?的主要内容,如果未能解决你的问题,请参考以下文章

带有 ExtendedSelection 的 Qml TreeView 中的 selectedRows() 落后了一步

QML:如何在 TreeView 和 TableView 禁用边框?

如何将渐变设置为 QML TreeView 背景?

来自模型的 QML 树视图

使 QML TreeView 可调整大小

C#.NET winform treeview和panel导航效果