Qt5 QML,何时使用ColumnLayout vs Column?

时间:2016-02-22 17:34:23

标签: qt qml qt5

例如,这有效:

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 个答案:

答案 0 :(得分:8)

来自Column的{​​{3}}:

  

列是一种将子项目沿一列定位的类型。它可以用作垂直定位一系列项目而不使用锚点的便捷方式。

此外,它可以简化插入,删除等过程中的转换。它还将documentation附加到项目上,以便为他们提供有关其职位的概念。

另一方面,propertiesGridLayout的文档(请注意,ColumnLayout是一个便利工具,但它只不过是一个包含一列的网格,来自this) 它具有完全不同的属性集以及附加属性,完全取决于项目的排列。

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

  

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

     

当需要以常规布局排列时,定位器可以更轻松地处理许多项目。

     

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

请注意,ColumnPositioner,而ColumnLayoutLayout。什么时候使用它们主要取决于你的目标,像往常一样。