Установка размеров в контейнерах компоновки

Последнее обновление: 18.12.2023

Тип Layout с помощью прикрепленных свойств позволяет установить минимальные, максимальные и предпочтительные размеры. Для установки минимальной ширины и высоты применяются соответственно свойства Layout.minimumWidth и Layout.minimumHeight. Если минимальный размер элемента не указан явно, размер устанавливается равным 0.

Для установки максимальной ширины и высоты применяются соответственно свойства Layout.maximumWidth и Layout.maximumHeight. Если максимальный размер элемента не указан явно, размер устанавливается равным Number.POSITIVE_INFINITY (неограниченный размер).

Для установки предпочтительной ширины и высоты применяются соответственно свойства Layout.preferredWidth и Layout.preferredHeight. Какие именно размеры будут установлены также зависит от свойств Layout.fillWidth и Layout.fillHeight.

Свойство Layout.fillWidth задает заполнение элементом контейнера по ширине. Если это свойство равно true, то элемент растягивается по ширине контейнера, при этом ширина элемента должна быть не меньше минимальной и не больше максимальный ширины. Если свойство Layout.fillWidth равно false, то ширина элемента устанавливается на основе его предпочтительной ширины.

Свойство Layout.fillHeight задает заполнение элементом контейнера по высоте. Если это свойство равно true, то элемент растягивается по высоте контейнера, при этом высота элемента должна оставаться не меньше минимальной и не больше максимальный высоты. Если свойство Layout.fillHeight равно false, то высота элемента устанавливается на основе его предпочтительной высоты.

Если есть несколько элементов, для которых свойства Layout.fillWidth (и/или Layout.fillHeight) равны true, то размеры этих элементов будут увеличиваться или уменьшаться на основе соотношения их предпочтительных размеров.

Рассмотрим различные варианты. Возьмем следующий элемент RowLayout:

import QtQuick
import QtQuick.Layouts

Window {
    width: 280
    height: 150
    visible: true
    title: "METANIT.COM"
    RowLayout{
        anchors.fill: parent  // строка заполняет пространство контейнера
        spacing: 10
        Rectangle{
            Layout.preferredHeight: 80
            Layout.preferredWidth: 80
            color: "#eb4d4b"    // красный
        }
        Rectangle{
            Layout.fillHeight: true
            Layout.preferredWidth: 80
            color: "#16a085"    // зеленый
        }
        Rectangle{
            Layout.fillHeight: true
            Layout.fillWidth: true
            color: "#0984e3"    // синий
        }
    }
}
Установка размеров в элементах компоновки Layout в Qt и QML

Прежде всего следует отметить, что строка RowLayout здесь заполняет все пространство окна:

anchors.fill: parent

У первого элемента свойства Layout.fillWidth/Layout.fillWidth не установлены и равны по умолчанию false, поэтому применяются предпочтительные размеры

Rectangle{
    Layout.preferredHeight: 80
    Layout.preferredWidth: 80
    color: "#eb4d4b"    // красный
}

Второй элемент устанавливает для свойства Layout.fillHeight значение true, поэтому его высота будет устанавливаться исходя из доступной высоты контейнера

Rectangle{
    Layout.fillHeight: true
    Layout.preferredWidth: 80
    color: "#16a085"    // зеленый
}

Третий элемент устанавливает значение true для обоих свойств - Layout.fillHeight и Layout.fillWidth , поэтому его высота и ширина будут устанавливаться исходя из доступной высоты и ширины контейнера

Rectangle{
    Layout.fillHeight: true
    Layout.fillWidth: true
    color: "#0984e3"    // синий
}

Если с высотой все относительно просто - это высота строки (с учетом возможных отступов), то ширина устанавливается с учетом доступной ширины контейнера, которая вычисляется с учетом ширины других элементов строки. То есть из ширины контейнера вычитается ширина элементов с

Чтобы ограничить автоматическое растяжение/сжатие элемента, можно установать минимальные и(или) максимальные размеры:

Rectangle{
    Layout.fillHeight: true
    Layout.fillWidth: true
    Layout.minimumHeight: 50
    Layout.maximumHeight: 100
    Layout.minimumWidth: 50
    Layout.maximumWidth: 100
    color: "#0984e3"
}

Следующая ситуация - у элементов установлены и предпочтительные размеры, а свойства Layout.fillHeight и Layout.fillWidth равны true:

import QtQuick
import QtQuick.Layouts

Window {
    width: 280
    height: 150
    visible: true
    title: "METANIT.COM"
    RowLayout{
        anchors.fill: parent  // строка заполняет пространство контейнера
        spacing: 10
        Rectangle{
            Layout.fillHeight: true
            Layout.fillWidth: true
            Layout.preferredWidth: 100
            color: "#eb4d4b"    // красный
        }
        Rectangle{
            Layout.fillHeight: true
            Layout.fillWidth: true
            Layout.preferredWidth: 50
            color: "#16a085"    // зеленый
        }
        Rectangle{
            Layout.fillHeight: true
            Layout.fillWidth: true
            Layout.preferredWidth: 100
            color: "#0984e3"    // синий
        }
    }
}

Здесь все три элементы имеют комбинацию свойств :

Layout.fillWidth: true
Layout.preferredWidth: 100 / 50

Только предпочтительная ширина первого и третьего элементов в два раза больше предпочтительный ширины второго элемента. Поэтому ширина всех трех элементов будет устанавливаться автоматически, но ширина первого и третьего элементов всегда будут в два раза больше ширины второго.

Автоматические размеры элементов в Layout в Qt и QML
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850