序言
用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
:该属性保存用于度量的文本,如果已经赋予了值,可直接读取为实际的文本,即使超过了省略宽度,也不会出现上者一般的省略号修饰
未完待续…