QML ColumnLayout 不尊重 minimumHeight

Posted

技术标签:

【中文标题】QML ColumnLayout 不尊重 minimumHeight【英文标题】:QML ColumnLayout does not respect minimumHeight 【发布时间】:2021-05-10 21:30:05 【问题描述】:

我总是对 QML 的布局管理有问题。因此,我创建了一个非常简单的 QML 应用程序来检查 ColumnLayout。如果我水平缩小窗口,当达到 100 时,它将在 minimumWitdh 处停止。 但是如果我垂直收缩窗口,我可以收缩窗口,这样两个矩形都会消失。

出了什么问题?为什么不遵守 minimumHeight?

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Layouts 1.15

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

    ColumnLayout 
        Rectangle 
            color: "red"
            Layout.minimumWidth: 100
            Layout.minimumHeight: 100
        
        Rectangle 
            color: "blue"
            Layout.minimumWidth: 100
            Layout.minimumHeight: 100
        
    

【问题讨论】:

我猜你提供的代码可能不完整,也没有描述问题。布局的大小未设置,因此无法影响矩形的大小。它始终是 100x100。 我在 Linux Mint 下使用 Qt Online-Installer 运行了相同的代码。所以与我在 Windows 上使用的版本相同。在 Linux 中 Layout.minimumWidth 和 Layout.minimumHeight 被忽略。 @folbis:我使用空 QtQuick 应用程序的标准模板创建了这个程序,并且刚刚在 main.qml 中添加了 ColumnLayout 部分。所以,main.cpp 没有改变。 (我不想上传它)。我不明白“未设置布局的大小”。我认为 Layout.minimumWitdh 和 Layout.minimumHeight 附加到 recatangle,来自 ColumnLayout。而且我认为最小尺寸是向上传播的,因此结果是,窗口的最小尺寸将是 100 宽和 200 高。 布局的大小由您的内容定义,因此始终为 100x200。窗口大小不取决于内容,除非您不使用 QQuickView::ResizeMode 设置为 QQuickView::SizeViewToRootObject 并且您的布局是根对象。 【参考方案1】:

folbis 可能是对的。但我找到了另一个解决方案。似乎 minimumWidth 和 minimumHeight 将计算 ColumnLayout 的隐式宽度和隐式高度。因此,这又可以用作窗口的 minimumWidth 和 minimumHeight,如下所示:

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

    minimumHeight: col.implicitHeight
    minimumWidth: col.implicitWidth


    ColumnLayout 
        id: col

        Rectangle 
            color: "red"
            Layout.minimumWidth: 100
            Layout.minimumHeight: 100
        
        Rectangle 
            color: "blue"
            Layout.minimumWidth: 100
            Layout.minimumHeight: 100
        
    

当你来自 XAML 世界时,这很奇怪。

【讨论】:

以上是关于QML ColumnLayout 不尊重 minimumHeight的主要内容,如果未能解决你的问题,请参考以下文章

QML 将 ColumnLayout 子项堆叠在一起?

Qt5-QML:ColumnLayout 在嵌套循环中覆盖另一个 ColumnLayout

如何在 QML 的 ColumnLayout 中使用 topMargin

ColumnLayout 中的 QML TabView

QML在Component中使用createObject填充ColumnLayout

如何在 QML 的 ColumnLayout 中使用自己的对象?