使QML布局未定义不会';Don’我不能删除那个项目

使QML布局未定义不会';Don’我不能删除那个项目,qml,Qml,我有一个情况,根据一些设置,一个按钮需要显示或隐藏。我尝试使用加载程序和组件机制来实现同样的功能。但是,在初始化一次之后,即使我未定义加载程序的sourceComponent,QML仍将其视为有效,并且我看到了间距(我在rowLayout中使用这些间距) 代码如下: 导入QtQuick 2.14 导入QtQuick.Window 2.14 导入QtQuick.Layouts 1.3 窗口{ id:根 可见:正确 宽度:640 身高:480 标题:qsTr(“你好世界”) 属性变量itemWidt

我有一个情况,根据一些设置,一个按钮需要显示或隐藏。我尝试使用加载程序和组件机制来实现同样的功能。但是,在初始化一次之后,即使我未定义加载程序的
sourceComponent
,QML仍将其视为有效,并且我看到了间距(我在rowLayout中使用这些间距)

代码如下:

导入QtQuick 2.14
导入QtQuick.Window 2.14
导入QtQuick.Layouts 1.3
窗口{
id:根
可见:正确
宽度:640
身高:480
标题:qsTr(“你好世界”)
属性变量itemWidth:150
属性变量itemHeight:60
房地产var myMargin:10
属性变量可见性:true
行布局{
间距:root.width-2*root.itemWidth
装载机{
sourceComponent:{
if(root.visibility){
返回myComponent
}
否则{
返回未定义
}
}
//Layout.preferredWidth:{
//if(root.visibility){
//返回root.itemWidth
//                }
//否则{
//返回0
//                }
//            }
}
组成部分{
id:myComponent
长方形{
宽度:itemWidth
高度:项目高度
border.color:“黑色”
正文{
文本:“我的组件”
}
}
}
长方形{
宽度:itemWidth
高度:项目高度
border.color:“黑色”
正文{
文本:“行中的项目”
}
}
}
计时器{
id:t1
间隔时间:3000
重复:对
跑步:对
反对:{
root.visibility=!root.visibility
}
}
}
如果我尝试将
preferredWidth
设置为零,则项目宽度消失,但间距仍然存在。你有没有想过为什么会这样

当两个矩形都可见时:

加载程序未定义且preferredWidth强制为0时:


如果将
加载器设置为可见:false(因此
加载器
本身),则
行布局
将跳过
加载器
,因此不会显示额外的间距