查找Qt QML文本元素的绘制X和Y位置(例如左上角)
与TextMetrics和此相关 有没有一种方法可以精确地对齐一个矩形以包围一些封闭的文本?我之所以希望矩形和文本的像素精确对齐,是因为我希望在一些图形(例如绘图)旁边绘制文本 多亏了下面的答案,我几乎把文本和矩形对齐了,但还是差了几个像素,而且对齐方式似乎在不同平台上有所不同。截图来自OSX查找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 {
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。