Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QML:如何获得中继器的总高度?_Qt_Qml_Qt5_Repeater - Fatal编程技术网

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
不是布局,因此,当您使用
而不使用
间距
中继器
的项目进行分组时,
的高度是
中继器
的总高度。