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