有没有办法删除QML Layout组件中的开始和结束边距?
这是一个包含几个孩子的ColumnLayout示例。问题是如何删除那些顶部和底部边距并沿着父布局的整个高度重新分配所有子节点。
ColumnLayout {
id: dotColumn
anchors.horizontalCenter: bg.horizontalCenter
height: root.height
Repeater {
id: repeater
model: root.model
Item {
id: activeDot_container
property int radius: 15
width: radius * 2
height: radius * 2
Rectangle {
anchors.centerIn: parent
radius: parent.radius
width: radius * 2
height: radius * 2
color: Palette.colors['deepPurple']['500']
}
}
}
}
答案 0 :(得分:1)
经过几次布局定位实验后,我得到了以下解决方案。
假设我要消除的边距大小为布局子节点间距的一半,我们可以将负边距设置为布局组件的开头和结尾,将其拉伸到第一个,最后一个子节点在布局的开始/结束时对齐
我用来计算边距的函数:
function getMargin() {
var height = root.height;
var spacing = (height - root.radius * 2 * model.length) / model.length;
return spacing / 2;
}
其中root
是布局组件的父级,root.radius*2
表示布局子项的大小,可以替换为另一个子维,model.length
代表子计数。
然后我们可以为Layout组件设置锚点并设置相应的边距。
ColumnLayout {
anchors.top: root.top
anchors.bottom: root.bottom
anchors.topMargin: -1 * getMargin()
anchors.bottomMargin: -1 * getMargin()
Repeater {
model: root.model
Item {
property int radius: root.radius
width: radius * 2
height: radius * 2
/* more code */
}
}
}
P.S。通过用左/右替换布局顶部/底部锚点,可以将相同的解决方案应用于RowLayout。
答案 1 :(得分:0)
您无法将布局内的项目对齐到顶部和底部。作为一种解决方法,您可以将带有变量y
的项放在容器中,如下所示:
Window {
visible: true
visibility: Window.Maximized
ColumnLayout {
anchors.horizontalCenter: parent.horizontalCenter
height: parent.height
spacing:1
Repeater {
id: repeater
model: 10
Rectangle {
color: "green"
property int radius: 15
width: radius
Layout.fillHeight: true
Rectangle {
anchors.horizontalCenter: parent.horizontalCenter
y: index * (parent.height - height) / (repeater.count - 1)
radius: parent.radius
width: radius * 2
height: radius * 2
color: "blue"
}
}
}
}
}