如何在文本更改时自动更改高度



我想知道更改文本后文本/标签的高度。让我们以游戏中的对话框系统为例。如果我有更多的文本要显示,标签和背景的高度将需要展开(自动((反之亦然(。

目前,它可以正确显示文本(如果我将clipping设置为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建议的那样:从标签中删除height属性即可完成任务。为了更好地回答我的问题,我修改了这个例子,并使用了一个隐藏标签和该标签的onheightChanged事件来修改"其他东西"的高度。在游戏对话框中,可以作为文本和对话框本身文本的背景。在这个例子中,我只是根据我输入的文本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."
}
}
}
}

相关内容

  • 没有找到相关文章

最新更新