如果文本更改,如何使高度自动更改
how to make the height change automatically if the text changes
我想知道我的 text/label 修改文本后的高度。让我们以游戏中的对话系统为例。如果我有更多文本要显示,标签和背景的高度将需要扩展(自动)(反之亦然)。
目前它可以正确显示文本(如果我将裁剪设置为 false),但它不会改变标签的高度。因此,如果我在一列中放置 3 个标签,它们的文本可能会重叠。
在其他语言中,例如 delphi/pascal(使用 firemonkey),标签的大小具有 属性“自动调整大小”,它会根据(的)的(长度)调整标签的高度内容。使用隐藏标签,可以简单地获取视觉标签的高度(并相应地更改伴随的背景)。
Qt/Qml有这个选项吗?
根据要求,我正在处理一个示例(来自 Bryan Cairns 的课程),其中第二个和第三个标签的文本重叠:
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.15
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
Column {
x: 0
y: 0
width: 538
height: 340
Label {
id: label
x: 60
y: 38
text: qsTr("This is a label")
}
Label {
id: label1
x: 60
y: 74
width: 107
height: 75
color: "#ff0000"
text: qsTr("This is a long label title - probably the longest ever")
wrapMode: Text.WordWrap
font.pointSize: 13
font.italic: true
font.bold: true
textFormat: Text.AutoText
clip: false
}
Label {
id: label2
x: 60
y: 208
text: qsTr("This is <font color='blue'><b>H<i>T</i>ML</b>!!!</font>")
font.pointSize: 40
}
}
}
就像 JarMan 建议的那样:从标签中删除高度 属性 就可以了。为了更好地回答我的问题,我更改了示例并使用隐藏标签和该标签的 onheightChanged 事件来修改 'something else' 的高度。在游戏对话中,它可以是文本的背景和对话本身的文本。在这个例子中,我只是根据我输入 labelHidden 的文本修改 label1 的(固定)高度。
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.15
Window {
id: window
width: 640
height: 480
visible: true
title: qsTr("Hello World")
Label {
id: labelHidden
x: -600
//y: 74
width: 200
//height: 75
color: "#ff0000"
text: qsTr("This is a long label title - probably the longest ever")
wrapMode: Text.WordWrap
font.pointSize: 13
font.italic: true
font.bold: true
textFormat: Text.AutoText
clip: false
onHeightChanged: {
label1.height = height
label1.text = text
}
}
Column {
x: 0
y: 0
width: 538
height: 340
Label {
id: label
x: 60
y: 38
text: qsTr("This is a label")
}
Label {
id: label1
x: 60
//y: 74
width: 200
height: 75
color: "#ff0000"
text: qsTr("This is a long label title - probably the longest ever")
wrapMode: Text.WordWrap
font.pointSize: 13
font.italic: true
font.bold: true
textFormat: Text.AutoText
clip: false
}
Label {
id: label2
x: 60
y: 208
text: qsTr("This is <font color='blue'><b>H<i>T</i>ML</b>!!!</font>")
font.pointSize: 40
}
}
Button {
id: button
x: 521
y: 422
text: qsTr("Make longer")
anchors.bottom: parent.bottom
anchors.bottomMargin: 18
Connections {
target: button
onClicked: {
labelHidden.text = "This is an even longer text that alters the height of an invisible label and in its turn triggers the onHeightChange event of the invisible label to modify for instance a background height and a label height in a game dialog. For this example it only changes the height of label1."
}
}
}
}
我想知道我的 text/label 修改文本后的高度。让我们以游戏中的对话系统为例。如果我有更多文本要显示,标签和背景的高度将需要扩展(自动)(反之亦然)。
目前它可以正确显示文本(如果我将裁剪设置为 false),但它不会改变标签的高度。因此,如果我在一列中放置 3 个标签,它们的文本可能会重叠。
在其他语言中,例如 delphi/pascal(使用 firemonkey),标签的大小具有 属性“自动调整大小”,它会根据(的)的(长度)调整标签的高度内容。使用隐藏标签,可以简单地获取视觉标签的高度(并相应地更改伴随的背景)。
Qt/Qml有这个选项吗?
根据要求,我正在处理一个示例(来自 Bryan Cairns 的课程),其中第二个和第三个标签的文本重叠:
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.15
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
Column {
x: 0
y: 0
width: 538
height: 340
Label {
id: label
x: 60
y: 38
text: qsTr("This is a label")
}
Label {
id: label1
x: 60
y: 74
width: 107
height: 75
color: "#ff0000"
text: qsTr("This is a long label title - probably the longest ever")
wrapMode: Text.WordWrap
font.pointSize: 13
font.italic: true
font.bold: true
textFormat: Text.AutoText
clip: false
}
Label {
id: label2
x: 60
y: 208
text: qsTr("This is <font color='blue'><b>H<i>T</i>ML</b>!!!</font>")
font.pointSize: 40
}
}
}
就像 JarMan 建议的那样:从标签中删除高度 属性 就可以了。为了更好地回答我的问题,我更改了示例并使用隐藏标签和该标签的 onheightChanged 事件来修改 'something else' 的高度。在游戏对话中,它可以是文本的背景和对话本身的文本。在这个例子中,我只是根据我输入 labelHidden 的文本修改 label1 的(固定)高度。
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.15
Window {
id: window
width: 640
height: 480
visible: true
title: qsTr("Hello World")
Label {
id: labelHidden
x: -600
//y: 74
width: 200
//height: 75
color: "#ff0000"
text: qsTr("This is a long label title - probably the longest ever")
wrapMode: Text.WordWrap
font.pointSize: 13
font.italic: true
font.bold: true
textFormat: Text.AutoText
clip: false
onHeightChanged: {
label1.height = height
label1.text = text
}
}
Column {
x: 0
y: 0
width: 538
height: 340
Label {
id: label
x: 60
y: 38
text: qsTr("This is a label")
}
Label {
id: label1
x: 60
//y: 74
width: 200
height: 75
color: "#ff0000"
text: qsTr("This is a long label title - probably the longest ever")
wrapMode: Text.WordWrap
font.pointSize: 13
font.italic: true
font.bold: true
textFormat: Text.AutoText
clip: false
}
Label {
id: label2
x: 60
y: 208
text: qsTr("This is <font color='blue'><b>H<i>T</i>ML</b>!!!</font>")
font.pointSize: 40
}
}
Button {
id: button
x: 521
y: 422
text: qsTr("Make longer")
anchors.bottom: parent.bottom
anchors.bottomMargin: 18
Connections {
target: button
onClicked: {
labelHidden.text = "This is an even longer text that alters the height of an invisible label and in its turn triggers the onHeightChange event of the invisible label to modify for instance a background height and a label height in a game dialog. For this example it only changes the height of label1."
}
}
}
}