【问题标题】:How to set custom separator between items of ListView如何在 ListView 的项目之间设置自定义分隔符
【发布时间】:2014-11-20 08:32:39
【问题描述】:

有没有办法使用自定义委托作为ListView 的每两个连续项之间的分隔符,就像headerfooter 属性一样?

【问题讨论】:

  • ListView中的splitter是什么,可以用来做什么?
  • @folibis 可能,术语“分隔符”会更合适。基本上,我希望能够在每两个连续项目之间画一条水平线。
  • 我已经更新了我的问题描述。

标签: qt qml qt5 qtquick2


【解决方案1】:

ListView 可以分为 sections,也就是组。该文档提供了一个很好的示例here

基本上你定义一个Component,就像你为HeaderFooter做的那样,并将它设置在section.delegate子属性中。在代码中:

列表视图 { 编号:查看 [...]

    section.property: "size"                    // <--- the splitting property name
    section.criteria: ViewSection.FullString    // <--- specify the way section is created (see the provided link)
    section.delegate: sectionDelegate           // <--- your delegate
}

【讨论】:

  • 感谢您的建议。我知道ListViewsection 功能,但没有考虑将每个项目放在单独的部分中。唉,它甚至会在列表中的第一项之前绘制分隔符。
  • 嗯,我明白了。抱歉说了老话。 :) 如果您只需要一个拆分器,一种方法是定义一个自定义 bool 属性,将其设置为部分标准,然后将部分委托可见性属性绑定到属性本身的值。我知道,这只是一种天真的方法。
  • 我想您应该将分隔符作为 ListView 项目的一部分。部分更倾向于对项目进行分组。
  • @folibis 这就是我最终的结果,但这种方法有点棘手。
【解决方案2】:

将您的项目放在带有 Rectangle 的 ColumnLayout 中,如下所示:

ListView {
    id: list
    clip: true
    model: ...
    spacing: 3
    Layout.fillHeight: true
    Layout.fillWidth: true

    delegate: ColumnLayout {
        width: list.width
        spacing: list.spacing

        MyItemDelegate {
            ...
        }

        Rectangle {
            color: "#999999"
            Layout.preferredHeight: 1
            Layout.fillWidth: true
            visible: (index !== (list.count - 1))
        }
    }
}

这样分隔符将只显示在项目之间,而不是最后一项。 您可以继续使用创建它们的部分。

【讨论】:

    【解决方案3】:

    我刚刚添加了:

    Text {
        text: "____________________________________________"
        color: "black"
    }
    

    到我的项目的末尾。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-26
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多