为什么 anchors.fill 在 QML ListView 的委托子视图中不起作用,什么是好的解决方案?

Why does anchors.fill does not work in a QML ListView's delegate's subviews, and what is a nice solution?

我遇到了这个:

ListView {
    id: listView
    model: ["Lorem","Ipsum"]
    delegate: Item {

        height: 20
        Text {
            z: 2
            text: modelData
            anchors.fill: parent
        }

        Rectangle {
            z: 1
            color: "red"
            // this does not work:
            anchors.fill: parent
            // this works, but I have mixed feelings about it:
            // height: 20; width: listView.width
        }
    }
}

因此,显然,anchors 在委托的子项中不起作用(在这种情况下,Rectangle 根本不显示)。我想了解这背后的机制。另外,我想问一下处理这种情况的首选方法是什么? 谢谢!

Item 有一个 implicitWidthimplicitHeight 为零,所以让你的 RectangleText 填充它会导致它们没有大小嗯。

您的代码有两处错误:

  1. ListView 没有指定 widthheight
  2. 您的代表没有 width 指定。

这是一种正确的方法:

import QtQuick 2.0
import QtQuick.Window 2.0

Window {
    width: 300
    height: 300
    visible: true

    ListView {
        id: listView
        anchors.fill: parent
        model: ["Lorem","Ipsum"]
        delegate: Item {
            width: listView.width
            height: textItem.implicitHeight

            Text {
                id: textItem
                z: 2
                text: modelData
                width: parent.width
            }

            Rectangle {
                z: 1
                color: "red"
                anchors.fill: parent
            }
        }
    }
}

documentation of ListView 有更多信息。