Qt QML:如何获得中继器的总高度?
我有一个中继器,但是中继器的孩子们有不同的高度,我自己也不能确定。但是,我需要找到所有中继器孩子的总身高。我知道我可以把所有孩子的身高加起来,但我觉得这样做效率太低了,我希望有更好的办法。下面是我用来测试的一些示例代码:Qt QML:如何获得中继器的总高度?,qt,qml,qt5,repeater,Qt,Qml,Qt5,Repeater,我有一个中继器,但是中继器的孩子们有不同的高度,我自己也不能确定。但是,我需要找到所有中继器孩子的总身高。我知道我可以把所有孩子的身高加起来,但我觉得这样做效率太低了,我希望有更好的办法。下面是我用来测试的一些示例代码: import QtQuick 2.10 import QtQuick.Window 2.10 Window { id: root width: 320 height: 580 Component.onCompleted: loadData() function loadD
import QtQuick 2.10
import QtQuick.Window 2.10
Window {
id: root
width: 320
height: 580
Component.onCompleted: loadData()
function loadData() {
var len, i, repeater_data
len = 3
repeater_data = new Array(len)
for (i = 0; i < len; i++) {
repeater_data[i] = { "name": i, "height": (Math.random() * 100 + 50) }
}
repeater.model = repeater_data
}
Flickable {
id: mainFlick
anchors.fill: parent
contentHeight: mainColumn.height
Column {
id: mainColumn
width: parent.width
Repeater {
id: repeater
width: parent.width
model: []
delegate: Column {
id: repeaterItem
width: parent.width
Text {
text: modelData["name"] + " - Height: " + modelData["height"]
height: modelData["height"]
}
} // repeaterItem
} // repeater
} // mainColumn
} // mainFlick
} // root
导入QtQuick 2.10
导入QtQuick.Window 2.10
窗口{
id:根
宽度:320
身高:580
Component.onCompleted:loadData()
函数loadData(){
变量len,i,中继器_数据
len=3
中继器数据=新阵列(len)
对于(i=0;i
我尝试了各种“childrenRect”属性的应用程序,但都没有成功。如果
len=3
,我有以下示例:
- 0-高度:86.47358953069201
- 1-高度:147.20601108198989
- 2-高度:100.03074850782205
focus: true
Keys.onPressed: {
console.log(mainFlick.contentHeight)
console.log(mainColumn.height)
}
我获得:
qml: 333.71034912050396
qml: 333.71034912050396
这不是我们要找的吗?我在寻找这个问题的答案,发现你可以用这个
mainColumn.childrenRect.height
在我的例子中,它将提供列的子项的总高度或行的子项的总宽度。Repeater是一个项目,因此它没有几何意义,Repeater仅基于模型创建其他项目,因此它不会提供任何关于几何体的信息,因此很遗憾,您必须添加。“你为什么认为添加是低效的?”eyllanesc谢谢你。这只是因为我在同一页上会有大量的项目和大量的转发器(它们可以折叠以节省空间),所以我担心在需要高度时循环和添加可能会造成不必要的延迟。多少是一个大数字?如果有数百个项目,我不认为会有延迟,因为每个项目的高度都是内联的(也就是说,没有计算,只有在必要时才重新计算),如果有数百万个项目,你必须提供足够的交易,但我认为你只有数百个项目。
Repeater
不是布局,因此,当您使用列
而不使用间距
对中继器
的项目进行分组时,列
的高度是中继器
的总高度。