You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Layout.verticalStretchFactor与Layout.horizontalStretchFactor不生效?

问题分析与解决

你的代码问题出在对Qt 6.5新增的Layout.verticalStretchFactor属性的使用场景适配上,虽然文档说明该属性可用于ColumnLayout的垂直拉伸,但实际使用中,更稳妥且兼容性更好的方式是使用传统的Layout.stretch属性(在ColumnLayout中它等价于垂直拉伸因子)。

修正后的代码

import QtQuick
import QtQuick.Controls
import QtQuick.Layouts

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    ColumnLayout {
        anchors.fill: parent

        Rectangle {
            Layout.fillHeight: true
            Layout.fillWidth: true
            Layout.stretch: 1  // 替换为Layout.stretch
            border.color: "red"
        }

        Rectangle {
            Layout.fillHeight: true
            Layout.fillWidth: true
            Layout.stretch: 2  // 替换为Layout.stretch
            border.color: "blue"
        }
    }
}

原理说明

在ColumnLayout中,Layout.stretch专门用于控制垂直方向的空间分配比例,当所有项设置了Layout.fillHeight: true时,布局会严格按照拉伸因子的比例分配全部可用空间。而新增的Layout.verticalStretchFactor更多是为GridLayout这类需要同时控制水平和垂直拉伸的场景设计的,在ColumnLayout中使用可能出现未预期的计算逻辑问题。

另外,你也可以尝试保留Layout.verticalStretchFactor,但为每个矩形显式设置Layout.preferredHeight: 0,强制布局完全基于拉伸因子计算空间:

Rectangle {
    Layout.fillHeight: true
    Layout.fillWidth: true
    Layout.preferredHeight: 0
    Layout.verticalStretchFactor: 1
    border.color: "red"
}

两种修改方式都能让红色矩形占用1/3垂直空间、蓝色矩形占用2/3,符合你的预期效果。

内容的提问来源于stack exchange,提问作者Isaac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 17:20:54