TextMetrics 应该告诉您渲染文本字符串的大小,但它似乎与文本实际呈现文本的方式不匹配,特别是如果字符串包括空格。某些字体和pointSize
或pixelSize
设置问题非常严重,但与其他字体或尺寸一起消失。
以下代码创建的Retangle与TextMetrics返回的boundingRect
具有完全相同的高度和宽度,它应该覆盖渲染文本的每个像素。
但是这些矩形比渲染文本略微更窄,导致最后一个字符悬挂在Rectangle之外,在那里它被下一个Rectangle覆盖(最后的'd'字符可以看到悬挂超出最后一个Rectangle的边缘)。
如何解决这个问题?
是否有可靠的方法知道完全渲染文本字符串的边界框?
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.3
ApplicationWindow {
visible: true
width: 800
height: 100
color: "grey"
TextMetrics {
id: metrics
font.family: "Helvetica" // or try "Ubuntu"
//font.pixelSize: 12
font.pointSize: 14
text: "H d" // more spaces causes more corruption
}
Row {
Repeater {
model: 5
Rectangle {
clip: false
color: "yellow"
width: metrics.boundingRect.width
height: metrics.boundingRect.height
Text {
text: metrics.text
font: metrics.font
}
}
}
}
}
答案 0 :(得分:0)
@MarkCh解决方案是对我有用的解决方案,同时比添加TextMetrics
元素更简单。这是我的完整解决方案:
Rectangle {
clip: false
color: "yellow"
width: text.contentWidth
height: text.contentHeight
Text {
id: text
text: "H d"
anchors.fill: parent
}
}