QML - TableView - 访问 headerDelegate 内的 TableViewColumn 属性

Posted

技术标签:

【中文标题】QML - TableView - 访问 headerDelegate 内的 TableViewColumn 属性【英文标题】:QML - TableView - Access TableViewColumn property inside headerDelegate 【发布时间】:2019-06-26 13:59:49 【问题描述】:

我在TableView 中有自定义headerDelegate。我需要访问TableViewColumn 的属性,例如headerDelegate 中的resizable 属性。

有什么方法可以访问headerDelegate 中的这个属性吗?

是否可以访问TableViewColumn 内部headerDelegate 中的用户定义属性?

例如,我可以在TableViewColumn 内部创建一个名为enableSorting 的用户定义属性并在headerDelegate 内部访问它以隐藏或显示sortingIndicator

更新

TableView

 TableViewColumn
    property bool sortingEnabled: false
    resizable: false


 headerDelegate: Rectangle 
   color: styleData.resizable?"red":"blue"
   border.color:styleData.sortingEnabled?"red":"blue"
 


这里的styleData.resizablestyleData.sortingEnabled 是虚构的。我想得到类似的东西。

【问题讨论】:

请添加minimal reproducible example 我添加了一个最小的例子。但它是不可重现的。 我找到了答案。这对我来说非常有用。 【参考方案1】:

你想要的是设置 TableView id 属性。您将能够以您想要的所有方式从整个文件范围访问它。

TableView
    id: myTableView
    headerDelegate: Rectangle 
       color: myTableView.whatever // Change whatever by any property of myTableView
    

重要提示:设置委托 id 并以其他方式访问将不起作用,因为它没有在 qml 解释器的读取时被实例化,而且它可能会针对委托项目的多个实例。

【讨论】:

【参考方案2】:

TableView的文档中,访问我们可以使用的列

getColumn(index)方法

TableView

 TableViewColumn
    property bool sortingEnabled: false
    resizable: false


 headerDelegate: Rectangle 
   color: getColumn(styleData.column).resizable?"red":"blue"
   border.color:getColumn(styleData.column).sortingEnabled?"red":"blue"

 


【讨论】:

以上是关于QML - TableView - 访问 headerDelegate 内的 TableViewColumn 属性的主要内容,如果未能解决你的问题,请参考以下文章

QML TableView + QAbstractTableModel - 如何从 QML 编辑模型数据?

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

QML TableView 模型静默失败?

QML:只有一行可见 TableView 与行和项目委托

TableView在按钮上滚动单击Qml

tableview中的QML排序非常缓慢