我已經成立了一個名爲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不能正常工作。 –