序言
用QML做一个按钮时,有需求是要求只有底下一横,但是不能靠太近,而且长度要刚刚好和字的长度一致,正当我查也查不出来时,被某群的群友启发,知道有一个TextMetrics可以提供相应字体的长度,但是网上没有多少相关的文档,所以我来破这个瓜

一、TextMetrics的用处
TextMetrics可以提供在初始化时相应字体的长度,记住重点!是在初始化时的长度

二、TextMetrics的简单用法
一般来说,我只需要赋予TextMetrics 的font属性和text属性即可,这样就已经满足需求了,更多细则看Qt助手即可
TextMetrics {
id: pageTextMetrics
font {
family: "serif"
pixelSize: 25
}
text: "交互指令"
}
如上,我给TextMetrics 赋予了一个 "serif"字体 25像素的字体格式(未设置的自动设为默认值),和相对应的“交互指令”,这样,我们就可以从中获取到四个字的实际代码长度了。
在使用时只需要这样调用其的width和height即可
ctx.beginPath()
ctx.moveTo( -pageTextMetrics.width / 2, 14)
ctx.lineTo( pageTextMetrics.width / 2, 14)
ctx.stroke()
记住:受控件实际缩放到界面,会导致实际长度有所变化,很可能会导致变化后的长度和代码的长度不一样,所以最好在代码里将其对齐就行。
综上,便得到了我设置的“交互指令”的长度了,至于我序言写的控件是怎么弄的,我只能说是用Canvas画出来的,要讲Canvas的话就未免太长了,我还没掌握好,加之我只是讲TextMetrics的用法,故此按下不表。
三、其余属性拓展
elide : enumeration:该属性的作用是,当实际文字长度超过赋予限制的文字长度elideWidth时,该TextMetrics的属性elidedText就会出现省略号,而出现的形式,则通过不同的枚举变量来显示
Qt::ElideNone - No eliding; this is the default value.
Qt::ElideLeft - For example: "...World"
Qt::ElideMiddle - For example: "He...ld"
Qt::ElideRight - For example: "Hello..."
elideWidth : real:与上者相搭配,赋予该属性,超过该宽度则会出现省略号
elidedText : string:这是呈现省略号时的text版本,比如说该属性保存的文本是"Hello…"
text : string:该属性保存用于度量的文本,如果已经赋予了值,可直接读取为实际的文本,即使超过了省略宽度,也不会出现上者一般的省略号修饰
未完待续…
本文介绍了如何利用QML的TextMetrics模块精确获取文本的宽度,特别是在创建自定义按钮时需要与文字长度匹配的需求。通过设置font和text属性,可以获取初始化时的文本长度,并使用width和height属性进行操作。此外,还提到了elide属性和elideWidth属性,用于在文本超出指定宽度时添加省略号。虽然文章未深入探讨Canvas的使用,但强调了TextMetrics在界面元素尺寸调整时的重要性。

5477

被折叠的 条评论
为什么被折叠?



