【问题标题】:How does one create a staggered grid view in QML?如何在 QML 中创建交错网格视图?
【发布时间】:2014-10-01 23:07:14
【问题描述】:

我正在尝试为我的 QML 应用程序创建交错网格视图,如下图所示。我尝试过使用 QML Flow 和 QML Grid,但是它们都没有得到我想要的设计。

例如,当我使用 QML Flow 时,它导致行总是从相同的 Y 值开始。

【问题讨论】:

    标签: qt qml


    【解决方案1】:

    我为我的应用 Project Dashboard 实现了一个交错网格视图(我称之为 ColumnFlow),并将它放在一个单独的库中,根据 GPLv3 获得许可。这是它的外观:

    ColumnFlow 的源代码在我的 GitHub 存储库 iBeliever/ubuntu-ui-extras 中。最初的实现是由另一个开发人员在我的库的一个分支中启动的,然后我将其拉回并进行了巨大的更改,以使其按照我需要的方式工作。

    您可以在sonrisesoftware/project-dashboard 中找到有关如何使用它的各种示例,例如Settings page

    【讨论】:

      【解决方案2】:

      您是否将 Flow containerflow 属性设置为 Flow.TopToBottom

      在这种情况下,item从上到下并排放置,直到超过Flow的高度,然后包裹到下一列。要获得垂直滚动行为,只需将 Flow 放入 Flickable 中即可。

      在我看来,这与您想要实现的目标非常接近。这是一个小的工作示例(QtQuick 2.2)

      Flickable
      {
          anchors.fill: parent
          anchors.margins: 5
          contentHeight: flow.height
      
          Flow
          {
              id: flow
              width: parent.width
              height: 800
              spacing: 10
              flow: Flow.TopToBottom
              Repeater
              {
                  model: [80,60,120,75,90,55,140,50,70,90,80,60,120,75,90]
                  Rectangle
                  {
                      height: modelData
                      width: 100
                      border.color: "black"
                  }
              }
          }
      }
      

      【讨论】:

      • 我试过了,但问题是它创建了一个水平滚动流视图,而我需要一个垂直滚动流视图,因此我的问题。但是谢谢你的回答。
      • 我用 Flickable 编辑了我的答案以获得预期的行为
      猜你喜欢
      • 2020-03-18
      • 1970-01-01
      • 2021-08-25
      • 2018-03-20
      • 2018-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多