Qt 字体 QFont的尺寸

​QFont有两种设置字体大小的方式,PointSize点大小和PixelSize像素大小。都设置为20,

font1.setPointSizeF(20);
font2.setPixelSize(20);

显示效果如图:
在这里插入图片描述
PointSize单位是磅,也就是 1/72 inch,PixelSize与PointSize的换算关系就是
PixelSize = DPI * PointSize / 72
Windows下,DPI固定为96,所以要让它们显示的字体大小一样时可以这样换算:

font1.setPointSizeF(20);
font2.setPixelSize(20 * 96 / 72);

在这里插入图片描述

字体在屏幕上的实际大小 = 字体像素大小 * 点距,设置了固定的点大小之后,字体会在不同分辨率、相同DPI的屏幕下会显示相同的大小,而在相同分辨率、不同DPI的屏幕下会随DPI设置而改变大小。仍然是20点大小的时候,屏幕设置为150%缩放时,左边PointSize设置的字体明显会变大:
在这里插入图片描述
字体绘制的基线是英文小写字母的书写下边缘,字号变大时也是基于这条线向上放大。
在这里插入图片描述
字体相关位置和尺寸可以通过QFontMetrics来计算。

    int QFontMetrics::width(str);//宽度
    QRect QFontMetrics::boundingRect(str);//字符串的边界
    int QFontMetrics::height();//高度
    int QFontMetrics::ascent();//基线以上高度
    int QFontMetrics::descent();//基线以下高度
    int QFontMetrics::leading();//行距
    int QFontMetrics::lineSpacing();//行高

在这里插入图片描述


图片参考:
Qt 字体(01):文本尺寸的常见参数解释_qt在windows和linux获取的字体宽度不对-CSDN博客
其中height = ascent + descent
lineSpacing = height + leading,
这些值除width外,都与字体ttf本身有关。如同样是20号字,height, ascent, descent, leading, lineSpacing四个值分别为:
微软雅黑 35 28 7 0 35,
宋体 27 23 4 4 31,
都以同样的颜色绘制出来,左边微软雅黑,右边宋体,雅黑的leading是0所以有两条线重合了:
在这里插入图片描述
QFontMetrics算出的boundingRect 的高度和height一致,宽度要比width窄一些,而QPainter的boundingRect函数算出的矩形宽高是一致的:

painter.setPen(QColor(0xff, 0x00, 0x00));
auto rect = metri1.boundingRect(str1);
rect.moveTo(startP1.x(), startP1.y() - ascent);
painter.drawRect(rect);
auto rect2 = painter.boundingRect(QRect(startP2.x(), startP2.y() - ascent,width(),height()), Qt::AlignLeft | Qt::AlignTop, str2);
painter.drawRect(rect2);

在这里插入图片描述

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值