qml TextMetrics不会布置与Text相同的空格

时间:2017-10-05 23:45:36

标签: qml

TextMetrics 应该告诉您渲染文本字符串的大小,但它似乎与文本实际呈现文本的方式不匹配,特别是如果字符串包括空格。某些字体和pointSizepixelSize设置问题非常严重,但与其他字体或尺寸一起消失。

以下代码创建的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
                }
            }
        }
    }
}

enter image description here

1 个答案:

答案 0 :(得分:0)

在问题注释中的

@MarkCh解决方案是对我有用的解决方案,同时比添加TextMetrics元素更简单。这是我的完整解决方案:

Rectangle {
    clip: false
    color: "yellow"
    width: text.contentWidth
    height: text.contentHeight
    Text {
        id: text
        text: "H                      d"
        anchors.fill: parent
    }
}