在Qt中计算文本的宽度与高度

 

在写一些需要精确布局或者排版的软件时候,我们需要知道文本的宽度和高度,保证我们在适当的坐标中使用drawText。例如,我在做一个简单的扫雷软件时,希望把每个格子附近的雷数给显示在小格子里,如下图所示,就需要这样的功能。
mines

不同的字体,字宽字高都是不一样的。所以计算文本宽度的是一个和字体相关的一个类QFontMetrics。

QPainter p(this);
QFontMetrics fm = p.fontMetrics();

可以用fm.width(text)获得你想处理的字串text的宽度。而高度对于所有的字都是一样的,可以用 fm.ascent()+fm.descent()来实现。ascent是指从一个字的基线(baseline)到最顶部的距离,descent是指一个字的基线到最底部的距离。关于字体的一些术语,请参考
http://book.csdn.net/bookfiles/308/10030812802.shtm

要记住,QPainter的drawText画字的基点坐标是字串的基线(不是底部,也不是顶部,而是下部)。看下面的贴图
drawtext1

所以,如果你想在坐标(0,0,20,20)的框正中画一个字的话,可以使用

QPoint pt((20-fm.width(text))/2,(20-(fm.ascent()+fm.descent()))/2+fm.ascent());
p.drawText(pt,text);
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值