QML - 如何适应和对齐 GridView 的项目?

Posted

技术标签:

【中文标题】QML - 如何适应和对齐 GridView 的项目?【英文标题】:QML - How to fit and align items of GridView? 【发布时间】:2018-02-19 18:42:24 【问题描述】:

我想将所有矩形放入GridView。我没有使用GridLayout,因为当我从GridLayout 中删除一个矩形时,它们会再次与GridLayout 对齐。 所以我使用了GridView 和我的代码:

import QtQuick 2.10
import QtQuick.Window 2.10
import QtQuick.Layouts 1.3

Window 
  visible: true
  width: 420
  height: 720
  title: qsTr("Hello World")


  GridView 
    id: area

    // If device orientation is vertical, GridView shall be 4x(model/4)
    property int verticalChoice: (parent.width < parent.height) ? 4 : 10
    //If device orientation is horizontal, GridView shall be (model/(model/4))x4
    property int horizontalChoice: (parent.width > parent.height) ? 10 : 4

    width: cellWidth * verticalChoice
    height: cellHeight * horizontalChoice
    anchors.centerIn: parent

    cellWidth: (parent.width / verticalChoice)
    cellHeight: (parent.height / horizontalChoice)

    model: 40
    clip: true
    interactive: false

    delegate: Rectangle 
      id: rect
      width: area.cellWidth - 5
      height: area.cellHeight - 5
      color: 'red'
      Text 
        text: index
        color: 'white'
        anchors.centerIn: parent
      
      MouseArea 
        anchors.fill: parent
        onClicked: rect.destroy(1000)
      
    
  

我将GridViewmodel 设置为40,并将interactive 设置为false。但我只看到 15 这样的项目: 我也写了anchors.centerIn: parent,但它没有运行。我该怎么做(以适应和对齐)?

【问题讨论】:

【参考方案1】:

对于项目数量,您在horizontalChoice的分配中只是有错误,设置4 * 4网格而不是10 * 4:

property int verticalChoice: (parent.width < parent.height) ? 4 : 10
property int horizontalChoice: (parent.width < parent.height) ? 10 : 4

对于居中问题,anchors.centerIn: parent 实际上按预期工作,但由于您指定代表比cellWidth/cellWidth 小 5px,因此您在右侧和底部有 5px 的空白空间。

为了防止这种情况,您可以使用包装 Item(据我所知 GridView 没有任何 spacing 属性):

delegate: Item 
    width: area.cellWidth
    height: area.cellHeight
    Rectangle 
        color: 'red'
        anchors 
            fill: parent
            margins: 5
        

        Text 
            text: index
            color: 'white'
            anchors.centerIn: parent
        
    

【讨论】:

哦,谢谢,这是真的。好吧,为什么anchors.centerIn: parent 不运行? 我像您的代码一样编辑了我的代码:gist.github.com/anonymous/9f219711985f8c69831ece5a7a02ab0f 但它不起作用。

以上是关于QML - 如何适应和对齐 GridView 的项目?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 QML 中处理来自父 Flickable 的 gridview contentY 和 Y 位置

在 QML 中单击时如何在 GridView 中显示较大版本的选定图像

如何从 QML 中的 GridView 或 ListView 获取实例化的委托组件

如何从QML中的GridView或ListView获取实例化的委托组件

QML:在 GridView 中加载图像

Qml:如何为所有 GridView 项目设置属性