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的主要内容,如果未能解决你的问题,请参考以下文章
Qt5-QML:ColumnLayout 在嵌套循环中覆盖另一个 ColumnLayout
如何在 QML 的 ColumnLayout 中使用 topMargin