QML - установка ширины и высоты не влияет

Быстрое управление 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
        }
    }
}

Может кто-нибудь объяснить мне, почему вариант B не «работает». Я могу указать любые значения ширины/высоты или даже просто удалить их - никакого эффекта. Вариант A (Layout.preferredWidth/Layout.preferredHeight) работает нормально.

Вариант А:

введите здесь описание изображения

Вариант Б:

введите здесь описание изображения


person Alexander Dyagilev    schedule 23.05.2018    source источник


Ответы (1)


Элементы ...Layout изменяют размеры своих дочерних элементов. Это их цель, и их поведение задокументировано.

Согласно документации ColumnLayout Layout.preferredWidth< /a> поведение:

Это свойство содержит предпочтительную ширину элемента в макете. Если предпочтительная ширина равна -1, она будет проигнорирована, и вместо этого макет будет использовать implicitWidth. По умолчанию -1.

Поскольку значение по умолчанию равно -1, будет использоваться implicitWidth - не написано "и вместо этого использовать ширину".


Если вы не хотите использовать Layout, не используйте Layout. Вместо этого вы можете просто взять Column.

person derM    schedule 23.05.2018
comment
поведение задокументировано. - не могли бы вы сказать мне, где именно? Я не вижу его... - person Alexander Dyagilev; 23.05.2018
comment
Теперь я понимаю, что изменение ширины не меняет implicitWidth. Тогда это имеет смысл... - person Alexander Dyagilev; 23.05.2018