首页 文章

QML布局:如何为行或列布局中的项目赋予权重?

提问于
浏览
3

我试图通过为每个项目指定一种权重来找出按比例布局项目的方法 . 例如Android的方式layouts .

我试图实现它的方式是这样的:

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附加属性上使用关系绑定似乎总是导致奇怪的绑定循环 . 我知道我可以使用一行而不是关系绑定,但如果可能的话我更喜欢使用Layouts .

EDIT

这似乎按我想要的方式工作,但我不知道为什么它有效 . 它的行为就像 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 回答

  • 1

    不确定是否有意,但 Layout.preferredWidth (或ColumnLayouts的 Layout.preferredHeight )可以用作"weight" . 当指定 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
        }
    }
    

相关问题