C++ 标签上的绑定循环警告

C++ 标签上的绑定循环警告,c++,qt,data-binding,qml,C++,Qt,Data Binding,Qml,我正在尝试类似的代码,但在列表视图委托上检测到属性“宽度”的“QML矩形:绑定循环”。这只发生在单词大于listView.width和文本换行的消息上。这种情况经常发生。我怎样才能修好它 delegeate: Rectangle { id: delegateFrame width: Math.min(messageText.implicitWidth , listView.width) height: messageText.implicitHeight Label {

我正在尝试类似的代码,但在列表视图委托上检测到属性“宽度”的“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
  }
}
我正在使用Qt5.8

编辑

正如Felix在他的回答中所建议的那样进行了更改,但它只是将警告中的“宽度”一词更改为“隐式宽度”


这里的原因可能是
高度:messageText.implicitHeight
锚定。fill:parent
。原因:

change label height --> change delegate hight --> change anchors --> change label height ...
QML检测这些循环并中断它们。在某些情况下,您必须接受这些,因为这是归档布局的唯一方法

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

  • 在委托中使用
    implicitHeight
    implicitWidth
    。有时,它们会删除警告
  • 不要使用
    锚定。填充
    仅绑定宽度:
    宽度:parent.width
    。由于已将父对象的高度调整为子对象的高度,因此子对象无需更改其相对于父对象的高度
  • 使用布局。例如它们提供了放置项目的高级方法,并使用附加属性调整项目的显示方式

原因可能是高度:messageText.implicitHeight和
锚定。fill:parent
。原因:

change label height --> change delegate hight --> change anchors --> change label height ...
QML检测这些循环并中断它们。在某些情况下,您必须接受这些,因为这是归档布局的唯一方法

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

  • 在委托中使用
    implicitHeight
    implicitWidth
    。有时,它们会删除警告
  • 不要使用
    锚定。填充
    仅绑定宽度:
    宽度:parent.width
    。由于已将父对象的高度调整为子对象的高度,因此子对象无需更改其相对于父对象的高度
  • 使用布局。例如它们提供了放置项目的高级方法,并使用附加属性调整项目的显示方式

如何定义
ListView.width
?当您声明时,当单词长度超过
ListView
的宽度时,会出现警告,您的
delegateFrame.implicitWidth
绑定到
ListView.width
,因此它与
消息文本.implicitWidth
无关使用您显示的代码片段,我们无法解决此问题。如何定义
ListView.width
?当您声明时,如果单词长度超过
ListView
的宽度,则会出现警告,您的
delegateFrame.implicitWidth
将绑定到
ListView.width
,所以它应该和
messageText.implicitWidth
=>根据您显示的代码片段,我们无法解决此问题。