我已经成立了一个名为test1.qml与文件,内容如下:调整ColumnLayout当Repeater的代表高度变化
import QtQuick 2.6
import QtQuick.Layouts 1.3
Rectangle {
width: 800; height: 1000;
ColumnLayout {
anchors.centerIn: parent
// Header goes here
Repeater {
model: 3
delegate: MyRectangle {
width: 150
height: width
color: "#44ff0000"
}
}
// Footer goes here
}
}
我还设置定义了一个名为test2.qml文件如下:
import QtQuick 2.6
import QtQuick.Layouts 1.3
Rectangle {
width: 800; height: 1000;
ColumnLayout {
anchors.centerIn: parent
// Header goes here
Repeater {
model: 3
delegate: Column {
MyRectangle {
width: 150
height: width
color: "#44ff0000"
}
}
}
// Footer goes here
}
}
最后,MyRectangle.qml有以下内容:
import QtQuick 2.6
Rectangle {
MouseArea {
anchors.fill: parent
onClicked: {
parent.height += 50
}
}
}
我的目标是,被点击MyRectangle的实例时,它们的高度有所改变,而且ColumnLayout应该扩大,以使项目保持它们的间距。
当我运行test.qml,结果不是我所期望的,因为MyRectangle重叠的情况下对方,因为他们被点击。但是,test2.qml给出了所需的行为,并且MyRectangle的实例保持其空间,因为放大了ColumnLayout。
在derM的请求下,我认为下面的GIF可能有助于更清楚地解释这一点。
test1.qml的(不期望的)行为:
test2.qml的(期望的)行为:
为什么是它我必须将对象包装在列中以实现设计红色的结果?
中继器没有布局。当你只有一个孩子时,你为什么要使用Column或RowLayout作为委托? – derM
Repeater只是创建一些委托实例,可能传递每个实例的模型数据。布局可以通过将Repeater放置在代表将要参与的布局中而应用于外部,或者每个代表可以关注其自己的位置,例如通过设置x和y值 – derM
您的意见是有道理的,我最初尝试使用只是一个矩形。然而,当我这样做时,我的所有物品都堆叠在一起。将“height:myDelegate.height”添加到Rectangle会正确地布局代理,但是Repeater(它本身就是ColumnLayout的一部分)没有得到正确的高度,Repeater下面的项目被布置在它。经过多次试验和错误之后,我发现Column或ColumnLayout会照顾我的问题。不过,我很想知道为什么Rectangle不能正常工作。 –