找到Qt QML文字元素的“绘制X和Y”位置(例如左上角)

时间:2018-08-07 21:15:47

标签: qt text qml metrics

与TextMetrics以及此question有关。

有没有一种方法可以准确地将矩形对齐以包围某些封闭的文本?我之所以希望矩形和文本的像素精确对齐是因为我想在某些图形(例如绘图)旁边绘制文本。

由于下面的答案,我几乎将文本和矩形对齐了,但是仍然有几个像素的偏移,并且对齐方式在各个平台上似乎有所不同。屏幕截图来自OSX。

TextMetrics {
    id: textMetrics
    text: "TextSample72"
    font.pointSize: 72
}
Rectangle {
    width: textMetrics.tightBoundingRect.width
    height: textMetrics.tightBoundingRect.height
    color: "#bbbbdd"
    z: 0
    Text {
        id: textSample72
        text: "TextSample72"
        font.pointSize: 72
        anchors.horizontalCenter: parent.horizontalCenter
        anchors.bottom: parent.bottom
        verticalAlignment: Text.AlignBottom
        z:1
    }
}

enter image description here

1 个答案:

答案 0 :(得分:2)

TextMetrics仅用于了解文本的宽度和高度,因为知道x和y的位置是没有意义的,因为它仅分析使用的字体。

在图像中,您可以看到文本存在垂直位移,并且位移是由锚点引起的,在您的代码中,您指示文本居中于矩形,但除此之外,您还指示上部与矩形的上部重合,如果字体的高度与矩形的高度不匹配(在这种情况下),则通过在{{1}中生成偏移量来强制其拉伸}的位置。

一个可能的解决方案是将文本的对齐方式设置为y,这样文本的高度和Text的高度之间就不会有差异,如果要移动,只需在其中进行矩形。

Text.AlignBottom

enter image description here