QML 文本的奇怪行为

Strange behaviour of QML Text

当我运行下面的简单例子时:

import QtQuick 2.9
import QtQuick.Controls 2.2
import QtQuick.Window 2.2
import QtQuick.Layouts 1.3

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    Popup {
        width: 100
        visible: true
        contentItem: ColumnLayout {
            Rectangle {
                Layout.fillWidth: true
                implicitHeight: 50
                color: "red"
            }

            Text {
                Layout.fillWidth: true
                text: "some very very very very very very very very very very very very long text"
                wrapMode: Text.WordWrap
            }
        }
    }
}

我收到以下警告:qrc:/main.qml:12:5: QML Popup: Binding loop detected for property "contentHeight"Popup 检测高度不正确:

也许问题与 TextimplicitHeight 有关,所以它对 ColumnLayoutimplicitHeight 有一些依赖性,但我不明白为什么。

任何人都可以解释一下绑定循环是如何出现的以及如何解决它吗?

解决方案:

Popup {
    width: 100
    visible: true
    contentItem: Column {

        Rectangle {
            width: parent.width
            implicitHeight: 50
            color: "red"
        }

        Text {
            width: parent.width
            text: "some very very very very very very very very very very very very long text"
            wrapMode: Text.WordWrap
        }
    }
}

关于警告: 它看起来像一个 Bug,但我想它不是。如果两个矩形不会有那个警告。

而去掉Layout.fillWidth: true的Text也不会有。 所以 Text 的高度需要 ColumnLayout 的宽度和 ColumnLayout 通过 Text 的高度扩展高度。感觉两个组件需要对方的大小是个悖论

更新:

Popup {
    width: 100
    visible: true
    contentItem: ColumnLayout {
        width: parent.width
        Rectangle {
            Layout.fillWidth: true
            implicitHeight: 50
            color: "red"
        }

        Text {
            Layout.fillWidth: true
            text: "some very very very very very very very very very very very very long text"
            wrapMode: Text.WordWrap
        }
    }
}