C++ 标签上的绑定循环警告
我正在尝试类似的代码,但在列表视图委托上检测到属性“宽度”的“QML矩形:绑定循环”。这只发生在单词大于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 {
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
- 使用布局。例如它们提供了放置项目的高级方法,并使用附加属性调整项目的显示方式
锚定。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
=>根据您显示的代码片段,我们无法解决此问题。