查找Qt QML文本元素的绘制X和Y位置(例如左上角)

查找Qt QML文本元素的绘制X和Y位置(例如左上角),qt,text,qml,metrics,Qt,Text,Qml,Metrics,与TextMetrics和此相关 有没有一种方法可以精确地对齐一个矩形以包围一些封闭的文本?我之所以希望矩形和文本的像素精确对齐,是因为我希望在一些图形(例如绘图)旁边绘制文本 多亏了下面的答案,我几乎把文本和矩形对齐了,但还是差了几个像素,而且对齐方式似乎在不同平台上有所不同。截图来自OSX TextMetrics { id: textMetrics text: "TextSample72" font.pointSize: 72 } Rectangle { wi

与TextMetrics和此相关

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

多亏了下面的答案,我几乎把文本和矩形对齐了,但还是差了几个像素,而且对齐方式似乎在不同平台上有所不同。截图来自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
    }
}

TextMetrics
只用于知道文本的宽度和高度,因为它只分析所使用的字体,所以不需要知道x和y的位置

在图像中,您可以看到文本存在垂直位移,位移是由锚引起的,在代码中,您指示文本位于矩形的中心,但除此之外,您还指示上部与矩形的上部重合,如果字体的高度与矩形的高度不匹配(如本例所示),则通过在文本的
y
位置生成偏移来强制矩形拉伸

一种可能的解决方案是将文本的对齐方式设置为
text.AlignBottom
,这样文本的高度和文本的高度就不会有差异,如果要移动,只需在矩形中移动即可

TextMetrics {
    id: textMetrics
    text: textSample72.text
    font: textSample72.font
}
Rectangle {
    y: 40  // if the rectangle is moved, 
    x: 40  // the text will also move
    width: textMetrics.tightBoundingRect.width
    height: textMetrics.tightBoundingRect.height
    color: "#bbbbdd"
    Text {
        id: textSample72
        text: "TextSample72"
        verticalAlignment: Text.AlignBottom
        font.pointSize: 72
        anchors.top: parent.top
        anchors.horizontalCenter: parent.horizontalCenter
        anchors.verticalCenter: parent.verticalCenter
    }
}

感谢您的回复。两个锚语句(top和vcenter)是一个拼写错误。我编辑了这个问题。使用您的回答,我几乎可以在OSX上获得完美的对齐效果,但仍有几个像素的偏移。@Colin在我显示的图像中,我看不到任何像素的偏移。@Colin您可以向我显示一张您使用我的解决方案得到的图像。是的,您使用的是windows还是linux?我发现不同平台的文本定位不同。我使用了对齐属性,并发布了OSX的屏幕截图,这是我能够实现的最接近完美对齐的屏幕截图。比以前更近了,但还是差了几个像素。@Colin我在Linux上,但我闻起来像个bug。