Макеты QML: Как задать вес для элементов в макете строки или столбца? - PullRequest
0 голосов
/ 02 июня 2018

Я пытаюсь найти способ пропорционально расположить элементы, указав вес каждого элемента.Например, способ, которым Android выполняет свои макеты .

. Способ, которым я пытаюсь достичь этого, выглядит примерно так:

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

GridLayout {
    columns: 4
    width: 640
    height: 480

    Rectangle {
        color: "red"
        Layout.fillHeight: true
        Layout.fillWidth: true
        Layout.columnSpan: 1
    }
    Rectangle {
        color: "#80000000"
        Layout.fillHeight: true
        Layout.fillWidth: true
        Layout.columnSpan: 2
    }
    Rectangle {
        color: "blue"
        Layout.fillHeight: true
        Layout.fillWidth: true
        Layout.columnSpan: 1
    }
}

Я бы ожидал ширинусредний прямоугольник должен быть суммой двух других прямоугольников, но вместо этого все они имеют одинаковую ширину.

Использование реляционных привязок в вложенных свойствах Layout, кажется, всегда приводит к странным циклам связывания.Я знаю, что вместо этого я мог бы использовать строку с реляционными привязками, но я бы предпочел использовать макеты, если это возможно.

РЕДАКТИРОВАТЬ

Кажется, это работает так, как яхочу, но я не знаю, почему это работает.Он ведет себя так, как будто значение preferredWidth является весом предмета.

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

RowLayout {
    width: 640
    height: 480

    Rectangle {
        color: "red"
        Layout.fillHeight: true
        Layout.fillWidth: true
        Layout.preferredWidth: 1
    }
    Rectangle {
        color: "#80000000"
        Layout.fillHeight: true
        Layout.fillWidth: true
        Layout.preferredWidth: 2
    }
    Rectangle {
        color: "blue"
        Layout.fillHeight: true
        Layout.fillWidth: true
        Layout.preferredWidth: 1
    }
}

1 Ответ

0 голосов
/ 06 июня 2018

Не уверен, намеренно или нет, но Layout.preferredWidth (или Layout.preferredHeight для ColumnLayouts) можно использовать в качестве «веса».Ситуация нарушается и при указании Layout.minimumWidth, но я не думаю, что имеет смысл указывать минимальные размеры при попытке реализовать макеты с точки зрения весов.

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

RowLayout {
    width: 640
    height: 480

    Rectangle {
        color: "red"
        Layout.fillHeight: true
        Layout.fillWidth: true
        Layout.preferredWidth: 1
    }
    Rectangle {
        color: "#80000000"
        Layout.fillHeight: true
        Layout.fillWidth: true
        Layout.preferredWidth: 2
    }
    Rectangle {
        color: "blue"
        Layout.fillHeight: true
        Layout.fillWidth: true
        Layout.preferredWidth: 1
    }
}
...