如何在 GridLayout - QML 中移动单元格?

Posted

技术标签:

【中文标题】如何在 GridLayout - QML 中移动单元格?【英文标题】:How to move a cell in GridLayout - QML? 【发布时间】:2015-06-24 07:05:53 【问题描述】:

考虑到documentation of GridLayout,这是我尝试过的:


import QtQuick 2.4
import QtQuick.Window 2.2
import QtQuick.Layouts 1.1

Window

    visible: true

    MainForm
    
        GridLayout 
            id: gridLayout
            columns: 3

            height: 100
            width: 100
            property int oneRow: 0
            property int oneCol: 0

            Rectangle  id: one; Layout.row :gridLayout.oneRow; Layout.column: gridLayout.oneCol;
                height: 50; width: 50; color: "brown"

            Rectangle  height: 50; width: 50; color: "red" 
            Rectangle  height: 50; width: 50; color: "blue"
            Rectangle  height: 50; width: 50; color: "green"
            Rectangle  height: 50; width: 50; color: "yellow"
        

        Component.onCompleted:
        
            gridLayout.oneRow = 2
            gridLayout.oneCol = 2
        
    

如果我从Component.onCompleted 注释掉这段代码,

gridLayout.oneRow = 2
gridLayout.oneCol = 2

我明白了:

而我希望棕色方块“移动到”第二行的最后一列。 所以,我写道:

gridLayout.oneRow = 1
gridLayout.oneCol = 2

Component.onCompleted.

然后,我得到了以下信息:

这不是我想要的。

请帮忙。

【问题讨论】:

如果在声明中最后设置棕色矩形会怎样? @Thomas 我在 OP 中双引号“移至”是有原因的。 我在这里看到了 很多 奇怪的东西,如果我的愚蠢问题伤害了你,我很抱歉 Layout.row (&column) 有帮助吗? 【参考方案1】:

如果您希望更改GridLayout 中某些项目的单元格编号,则需要将初始row number and column number 分配给所有元素_yourself_,然后动态更改所需项目的位置,如下所示:

import QtQuick 2.4
import QtQuick.Window 2.2
import QtQuick.Layouts 1.1

Window

    visible: true

    MainForm
    
        GridLayout 
            id: gridLayout

            height: 100
            width: 100

            property int oneRow: 0
            property int oneCol: 0
            Rectangle  id: one;
                Layout.row :gridLayout.oneRow; Layout.column: gridLayout.oneCol;
                height: 50; width: 50; color: "brown"

            property int twoRow: 0
            property int twoCol: 1
            Rectangle  id: two;
                Layout.row :gridLayout.twoRow; Layout.column: gridLayout.twoCol;
                height: 50; width: 50; color: "red" 

            property int threeRow: 0
            property int threeCol: 2
            Rectangle  id: three;
                Layout.row :gridLayout.threeRow; Layout.column: gridLayout.threeCol;
                height: 50; width: 50; color: "blue"

            property int fourRow: 1
            property int fourCol: 0
            Rectangle  id: four;
                Layout.row :gridLayout.fourRow; Layout.column: gridLayout.fourCol;
                height: 50; width: 50; color: "green"

            property int fiveRow: 1
            property int fiveCol: 1
            Rectangle  id: five;
                Layout.row :gridLayout.fiveRow; Layout.column: gridLayout.fiveCol;
                height: 50; width: 50; color: "yellow"
        

        Component.onCompleted:
        
            gridLayout.oneRow = 1
            gridLayout.oneCol = 2
        
    

现在,您可以在Component.onCompleted 中看到以下代码将棕色矩形移动到第 2 行的第 3 列。

Component.onCompleted:
  
      gridLayout.oneRow = 1
      gridLayout.oneCol = 2
  

【讨论】:

以上是关于如何在 GridLayout - QML 中移动单元格?的主要内容,如果未能解决你的问题,请参考以下文章

Qml GridLayout如何指定列宽?

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

将我自己的 QML 按钮插入 GridLayout

如何正确使用 QQuickItem::stackBefore() 重新排序 GridLayout 中的项目?

QML GridLayout 不遵守我指定的单元格排列

如何在 QML 中链接两个滚动视图?