Qt QML根据其下方项目的高度变化来改变项目的高度

Qt QML根据其下方项目的高度变化来改变项目的高度,qt,qml,Qt,Qml,我有一个列表视图和一个文本区域。我希望listview的高度相对于textarea的大小增加或减少。我尝试将listview的底部锚定到textarea的顶部,但没有成功。然后我尝试将textarea的顶部锚定到listview的底部,但也没有成功。两个都试过了,都没试过。每次为属性“height”检测到绑定循环时,它都会发出运行时错误/警告 我也在textarea的范围内尝试了这一点,但我有相同的运行时错误/警告,没有结果: onTextChanged: { listV

我有一个列表视图和一个文本区域。我希望listview的高度相对于textarea的大小增加或减少。我尝试将listview的底部锚定到textarea的顶部,但没有成功。然后我尝试将textarea的顶部锚定到listview的底部,但也没有成功。两个都试过了,都没试过。每次为属性“height”检测到绑定循环时,它都会发出运行时错误/警告 我也在textarea的范围内尝试了这一点,但我有相同的运行时错误/警告,没有结果:

onTextChanged: {
            listView.anchors.bottomMargin = height;
        }
我怎样才能做到这一点

代码如下:

    ListView{
    id: listView
//        anchors.fill: parent
    anchors.top: parent.top
    anchors.left: parent.left
    anchors.right: parent.right
    anchors.bottom: parent.bottom
    anchors.bottomMargin: 0
    anchors.margins: 10
    delegate: ChatMessageItem{}
    model: listModel
    spacing: 15
}

Rectangle{
    id: rectInput
    height: childrenRect.height + 6
    width: parent.width
//        anchors.top: listView.bottom
    anchors.bottom: parent.bottom
    color: "#BDC3C7"
    TextArea{
        id: tMsg
        placeholderText: qsTr("Enter message")
        width: parent.width - 30
        anchors.bottom: parent.bottom
        anchors.bottomMargin: 2
        anchors.left: parent.left
        anchors.leftMargin: 1
        focus: true
        wrapMode: TextArea.Wrap
        background: Rectangle {
            border.color: "#BDC3C7"
            border.width: 2
            color: "#ECF0F1"
        }
        onTextChanged: {
            listView.anchors.bottomMargin = height;
        }
    }
}
我看不到任何地方定义了
childrenRect
。也许用
tMsg.height
替换它并将列表的底部锚定到矩形的顶部会起作用吗?它在我的示例文件中工作(我不能逐字使用您的代码,因为它本身并不完整)。将
childrenRect
替换为
tMsg
将为我删除绑定循环错误

顺便说一句:我将列表视图的底部放在了矩形的顶部,而不是放在矩形内部的文本区域的顶部:

anchors.bottom: rectInput.top
另一种方法是在列表视图中执行:

anchors.bottom: parent.bottom
anchors.bottomMargin: tMsg.height
除了在尚未创建文本视图时在启动时发出警告外,它也可以正常工作

我看不到任何地方定义了
childrenRect
。也许用
tMsg.height
替换它并将列表的底部锚定到矩形的顶部会起作用吗?它在我的示例文件中工作(我不能逐字使用您的代码,因为它本身并不完整)。将
childrenRect
替换为
tMsg
将为我删除绑定循环错误

顺便说一句:我将列表视图的底部放在了矩形的顶部,而不是放在矩形内部的文本区域的顶部:

anchors.bottom: rectInput.top
另一种方法是在列表视图中执行:

anchors.bottom: parent.bottom
anchors.bottomMargin: tMsg.height

除了在尚未创建文本视图时在启动时发出警告外,它也可以正常工作。

Hi!感谢您的回复和最佳实践建议。我只是想确认一下你发布的答案是否适合你?因为我在代码的
rectInput
中看不到文本区域,它实际上是一个大小发生变化的区域。并且listview的高度需要根据它进行更改。
childrenRect
是Item类的一个属性。它甚至可以在记录时正确显示高度。我尝试了您的解决方案,不幸的是,当文本字段的行数增加时,listview的高度不会降低。@AkashAggarwal再次编辑,这可能是绑定循环问题的答案。删除了我的旧评论以及与最终答案无关的评论。谢谢!绑定循环问题现在也解决了。但是,
childrenRect
属性导致错误是很奇怪的。嗨!感谢您的回复和最佳实践建议。我只是想确认一下你发布的答案是否适合你?因为我在代码的
rectInput
中看不到文本区域,它实际上是一个大小发生变化的区域。并且listview的高度需要根据它进行更改。
childrenRect
是Item类的一个属性。它甚至可以在记录时正确显示高度。我尝试了您的解决方案,不幸的是,当文本字段的行数增加时,listview的高度不会降低。@AkashAggarwal再次编辑,这可能是绑定循环问题的答案。删除了我的旧评论以及与最终答案无关的评论。谢谢!绑定循环问题现在也解决了。但是,
childrenRect
属性导致错误是很奇怪的。你不应该删除你的答案。这对我有用。问题是我的listview没有滚动到底部,这让我觉得它不工作。我修好了。不过,我仍然会遇到绑定循环错误@coyotte508@coyotte508也许我可以再次看到您的答案,以查看绑定循环问题并接受它。您不应该删除您的答案。这对我有用。问题是我的listview没有滚动到底部,这让我觉得它不工作。我修好了。不过,我仍然会遇到绑定循环错误@coyotte508@coyotte508也许我可以再看看你的答案,看看绑定循环的问题,并接受它。