标签

时间:2017-04-30 16:04:06

标签: c++ qt data-binding qml

我正在尝试类似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。

修改

菲利克斯在答案中提出改变,但它只改变了宽度"警告中的单词" implictWidth"。

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
  }
}

1 个答案:

答案 0 :(得分:2)

原因可能是height: messageText.implicitHeightanchors.fill: parent。原因是:

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

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

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

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