标签上的绑定循环警告
Posted
技术标签:
【中文标题】标签上的绑定循环警告【英文标题】:Binding loop warning on Label 【发布时间】:2017-04-30 16:04:05 【问题描述】:我正在尝试与the tutorial 类似的代码,但我在列表视图委托上得到“QML 矩形:检测到属性“宽度”的绑定循环”。这只发生在单词大于listView.width
并且发生文本换行的消息上。这一直在发生。我该如何解决?
delegeate: Rectangle
id: delegateFrame
width: Math.min(messageText.implicitWidth , listView.width)
height: messageText.implicitHeight
Label
id: messageText
anchors.fill: parent
text: model.text
wrapMode: Label.Wrap
我使用的是 Qt 5.8。
编辑
按照 Felix 在他的回答中的建议进行了更改,但它仅将警告中的“宽度”一词更改为“implicitWidth”。
delegeate: Rectangle
id: delegateFrame
implicitWidth: Math.min(messageText.implicitWidth , listView.width)
implicitHeight: messageText.implicitHeight
Label
id: messageText
width: parent.width
text: model.text
wrapMode: Label.Wrap
【问题讨论】:
你如何定义ListView.width
?
当你声明时,警告发生,当单词长于ListView
的宽度时,你的delegateFrame.implicitWidth
绑定到listView.width
,所以它应该与messageText.implicitWidth
。 => 使用您显示的 sn-p,我们无法解决问题。
【参考方案1】:
这里的原因大概是height: messageText.implicitHeight
和anchors.fill: parent
。原因:
change label height --> change delegate hight --> change anchors --> change label height ...
QML 检测到这些循环并中断它们。在某些情况下,您必须忍受这些,因为这是归档布局的唯一方法。
但是,在您的情况下,可能会有解决方案。您可以尝试以下方法之一,看看它们是否有效:
在委托中使用implicitHeight
和implicitWidth
。有时这些会删除警告
不使用anchors.fill
仅绑定宽度:width: parent.width
。由于您已经将父母的身高调整为孩子,因此孩子不需要将其身高更改为父母
使用布局。例如RowLayout
。它们提供了放置物品的高级方法,并使用附加属性来调整物品的显示方式
【讨论】:
以上是关于标签上的绑定循环警告的主要内容,如果未能解决你的问题,请参考以下文章
如何修复“警告:未知道具`change-background`,<div>标签上的`colorcode`。从元素中删除这些道具”错误?
检测到属性宽度的 QML 绑定循环(TextMetrics 行为怪异)