Qt5 QML中,何时使用ColumnLayout和何时使用Column?

20
例如,这个可以运行:
import QtQuick 2.5
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
import QtQuick.Layouts 1.2

ApplicationWindow
{
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    function thingWidth()
    {
        return width*80/100
    }

    Column
    {
        spacing: 10;
        anchors.horizontalCenter: parent.horizontalCenter

        Thing { color: "red"; width: thingWidth(); }
        Thing { color: "yellow"; width: thingWidth();  }
        Thing { color: "green"; width: thingWidth();  }
    }

}

Column更改为ColumnLayout,窗口大小调整会导致布局错误。

需要任何帮助,谢谢。

编辑1:

这里也提供所请求的Thing.qml.

import QtQuick 2.0

Item {
    property alias color: rectangle.color
    width: 50; height: 50

    Rectangle
    {
        id: rectangle
        border.color: "white"
        anchors.fill: parent
    }
}

看起来我的帖子大部分都是代码。是的,保姆,没错!那是因为人们在这里发布代码。


1
请提供Thing的代码,或者用我们可以访问到的东西(比如Rectangle)替换它们。 - Mitch
完成。对于“nanny”的问题,我很抱歉。 - jkj yuio
1个回答

13

以下是来自文档中的内容,关于Column

Column是一种类型,它将其子项沿单个列进行定位。它可以作为一种方便的方式来垂直定位一系列项目,而不使用锚点。

此外,它可以简化插入、删除等操作的过渡。它还会附加属性到项目上,使它们具有关于它们位置的概念。

另一方面,这里是关于GridLayout的文档(请注意,ColumnLayout是一个方便的实用工具,但与其文档所述一样,它只是一个包含一列的网格)。
它具有完全不同的属性集,以及完全针对项目排列的附加属性。

我想无论如何,文档中最有趣的页面是这个
我只是引用它:

Positioner项目是容器项目,管理声明性用户界面中项目的位置。 Positioner的行为方式类似于与标准Qt小部件一起使用的布局管理器,除了它们本身也是容器。

当需要以规则布局排列许多项目时,Positioners使得工作更加容易。

Qt Quick Layouts也可以用于在用户界面中排列Qt Quick项目。 它们管理声明性用户界面上项目的位置和大小,并且非常适合可调整大小的用户界面。

请注意,ColumnPositioner,而ColumnLayoutLayout。 使用它们取决于您的目标,通常情况下。

3
谢谢您的回答。据我理解,像Column这样的定位器可以告诉位置,但是像ColumnLayout这样的布局必须自己计算位置。在ColumnLayout中设置width是不好的,但在Column中是可以的。 - jkj yuio
2
在布局中,您有许多有趣的附加属性,例如Layout.preferredwidth。请参阅链接的文档。 - skypjack
一旦Qt需要支持屏幕大小差异很大的情况,即在诺基亚时代之后,就添加了布局。实际上,您拥有其他实现中缺少的"fill"属性。文档也强调了这一点,称它们非常适合可调整大小的用户界面。 - BaCaRoZzo
这是否意味着 Layout 用于调整项目大小,而 Positioner 只移动项目但不影响其大小? - Violet Giraffe
2
我认为在这里提供一个指向Positioners and Layouts文档的链接会很有用 :) - Stefan Monov
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接