【问题标题】:Qt5 QML, when to use a ColumnLayout vs Column?Qt5 QML,何时使用 ColumnLayout 与 Column?
【发布时间】:2016-06-04 06:20:44
【问题描述】:

例如,这是有效的:

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
    }
}

看起来我的帖子主要是代码。是的,保姆确实如此!那是因为人们在这里发布代码。

【问题讨论】:

  • 请 a) 提供 Thing 的代码,或 b) 将它们替换为我们可以访问的内容,例如 Rectangle
  • 完成。对不起保姆

标签: qt qml qt5


【解决方案1】:

来自documentationColumn

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

此外,它还简化了插入、删除等过程中的转换。它还将properties 附加到项目上,以向他们提供有关其位置的概念。

另一方面,thisGridLayout 的文档(请注意,ColumnLayout 是一个便利实用程序,但它只不过是一个带有一列的网格,就像它的 documentation 一样) .
它有一组完全不同的属性,以及附加的属性,完全面向项目的排列。

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

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

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

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

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

【讨论】:

  • 感谢您的回答。据我了解,像Column 这样的定位器可以被告知位置,但是像ColumnLayout 这样的布局必须自己计算位置。在ColumnLayout 中设置width 是不好的,但在Column 中是可以的。
  • 在布局中,您有很多有趣的附加属性,例如Layout.preferredwidth。请参阅链接文档。
  • 布局是在 Qt 必须支持具有非常不同尺寸的屏幕时添加的,即在诺基亚时代之后。实际上,您得到了其他实现中缺少的 fill 属性。文档中也强调了这一点,因为它说它们“非常适合 resizable 用户界面”
  • @BaCaRoZzo 没错,布局的fill 属性确实非常有用。该死的Columns!! :-)
  • 我认为Positioners and Layouts 文档的链接在这里会很有用:)
猜你喜欢
  • 2015-08-19
  • 1970-01-01
  • 1970-01-01
  • 2021-05-10
  • 2018-08-09
  • 1970-01-01
  • 2021-06-15
  • 2018-12-02
  • 2021-11-09
相关资源
最近更新 更多