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
检测高度不正确:
也许问题与 Text
的 implicitHeight
有关,所以它对 ColumnLayout
的 implicitHeight
有一些依赖性,但我不明白为什么。
任何人都可以解释一下绑定循环是如何出现的以及如何解决它吗?
解决方案:
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
}
}
}
当我运行下面的简单例子时:
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
检测高度不正确:
也许问题与 Text
的 implicitHeight
有关,所以它对 ColumnLayout
的 implicitHeight
有一些依赖性,但我不明白为什么。
任何人都可以解释一下绑定循环是如何出现的以及如何解决它吗?
解决方案:
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
}
}
}