QML - 设置宽度和高度无效

时间:2018-05-23 07:16:40

标签: qt qml qtquickcontrols2

快速控制2,Qt 5.10。

我基于ListView项创建了表控件。

使用此组件显示其中一列:

import QtQuick 2.10
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.3

Item
{
    id: root

    implicitHeight: item1.implicitHeight

    ColumnLayout
    {
        id: item1

        visible: !model.finished
        width: parent.width

        RowLayout
        {
            Label
            {
                text: "38%"
                Layout.alignment: Qt.AlignLeft
            }

            Label
            {
                text: "Paused"
                Layout.alignment: Qt.AlignRight
            }
        }

        ProgressBar
        {
            from: 0; to: 100; value: 40
            // Variant A
            /*Layout.preferredWidth: 30
            Layout.preferredHeight: 10*/
            // Variant B
            width: 30
            height: 10
        }
    }
}

有人可以解释一下为什么Variant B没有"工作"。我可以指定任何宽度/高度值,甚至只是删除它们 - 没有效果。变体A(Layout.preferredWidth / Layout.preferredHeight)工作正常。

变式A:

enter image description here

变式B:

enter image description here

1 个答案:

答案 0 :(得分:1)

...Layout项会改变孩子的维度。这是他们的目的,并记录了行为。

根据ColumnLayout Layout.preferredWidth的文档,行为是:

  

此属性保存布局中项目的首选宽度。如果首选宽度为-1,则将忽略该布局,而布局将使用implicitWidth。默认值为-1。

由于默认值为-1,因此需要implicitWidth - 它不会被写入"并使用宽度而不是#34;。

如果您不想使用Layout请勿使用Layout。您可以改为Column