标签上的绑定循环警告

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.implicitHeightanchors.fill: parent。原因:

change label height --> change delegate hight --> change anchors --> change label height ...

QML 检测到这些循环并中断它们。在某些情况下,您必须忍受这些,因为这是归档布局的唯一方法。

但是,在您的情况下,可能会有解决方案。您可以尝试以下方法之一,看看它们是否有效:

在委托中使用implicitHeightimplicitWidth。有时这些会删除警告 不使用anchors.fill 仅绑定宽度:width: parent.width。由于您已经将父母的身高调整为孩子,因此孩子不需要将其身高更改为父母 使用布局。例如RowLayout。它们提供了放置物品的高级方法,并使用附加属性来调整物品的显示方式

【讨论】:

以上是关于标签上的绑定循环警告的主要内容,如果未能解决你的问题,请参考以下文章

如何修复“警告:未知道具`change-background`,<div>标签上的`colorcode`。从元素中删除这些道具”错误?

检测到属性宽度的 QML 绑定循环(TextMetrics 行为怪异)

怎么取消循环引用警告

如何优雅地克服无意义的 C++ 编译器警告?

html5-tags 上的 PHP DOMDocument 错误/警告

如何摆脱烦人的 Horizo​​ntalContentAlignment 绑定警告?