Qt QML在GridLayout中,如何将不可见的单元格限制为0高度?

Qt QML在GridLayout中,如何将不可见的单元格限制为0高度?,qt,qml,grid-layout,Qt,Qml,Grid Layout,我有这样一个网格布局: AAAA cd CE CE CE cf CG 啊 E具有布局。填充高度:true,F具有首选高度, D和G可以隐藏,并根据其内容设置preferredHeight: Item { Layout.row: 2 Layout.column: 2 Layout.columnSpan: 1 Layout.rowSpan: 1 id : D visible : false Layout.preferr

我有这样一个网格布局:

AAAA
cd
CE
CE
CE
cf
CG

E具有
布局。填充高度:true
,F具有首选高度,
D和G可以隐藏,并根据其内容设置preferredHeight:

Item {
    Layout.row: 2
    Layout.column: 2            
    Layout.columnSpan: 1
    Layout.rowSpan: 1

    id : D
    visible : false
    Layout.preferredWidth : layConfig.implicitWidth + 10
    Layout.preferredHeight : layConfig.implicitHeight + 10
    anchors.margins : 20
    Grid {
        id : layConfig
        ...
        }
当D和G可见时大小正确。 但是当它们不可见时会被一个空的空间代替,而不是0高度的单元格

AAAA
C
C
CE
CE
cf
CG

虽然这是预期的:

AAAA
CE
CE
CE
CE
cf
CG

现在,我只是在GridLayout中添加了一个额外的ColumnLayout,用于管理元素D->G。 在短期内,它是有效的,但从长期来看,它将使整个代码复杂化


在纯GridLayout中,如何在单元格隐藏的情况下强制0高度?

既然您已经设置了D单元格的
首选高度
,您可以扩展绑定以包括单元格的可见性:

Layout.preferredWidth : D.visible ? layConfig.implicitWidth + 10 : 0

由于您没有显示代码的其余部分,因此可能需要进行一些额外的调整,但这应该更进一步。例如,
rowSpan
可能需要调整为C,可能您正在使用
Layout.row

我想我不明白您想要的结果是什么。在最后的图表中,你更喜欢EEFG是否全部移入第一个图中存在的空白单元格?也就是说,您想让它们上移两行吗?如果是这样,则必须手动重新排列GridLayout的子项才能执行此操作。GridLayouts强制一行的所有单元格都具有相同的高度,因此使单元格的内容不可见并不会删除现在为空的单元格。我希望当D不可见时,E(在fullHeight:true)占据D留下的位置。第2行只是折叠到0高度,而不是我无法控制的高度。这对C列来说是好的,因为有一个行跨度。