Qt 字体(01):文本尺寸的常见参数解释


前言

Qt中文本的尺寸结构比较比较简单,比较容易掌握。和windows下字体尺寸的定义不一样。


一、怎么知道文本的宽度和高度?

不同的字体,所占的空间尺寸是不同的。需要明确当前所使用的字体。

  • 定义一个QFont font,为了显示方便,特意定义了一个尺寸的字体

        QFont font;
        font.setPixelSize(400);
    
  • 使用 QFontMetrics 类来计算给定字体的字符和字符串的大小。

    QFontMetrics fm(font);
    
  • 重点掌握QFontMetrics 几个方法

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

二、文本尺寸的度量

在这里插入图片描述

由图可以看出:

  • height = ascent + descent
  • lineSpacing = height + leading
  • boundingRect 的高度和height一致,但宽度有点偏窄
  • 红线为baseline,文本绘制是起点位置
  • leading = descent ,这一点在Qt文档里没有明确,可能是特例吧

主要部分代码如下:

void Widget::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.setRenderHints(QPainter::Antialiasing);

    QFont font;
    font.setPixelSize(400);

    QFontMetrics fm(font);
    QString str("Agǎ8");

    int w  = fm.horizontalAdvance(str);
    int h = fm.height();
    int ascent = fm.ascent();
    int descent= fm.descent();
    int leading = fm.leading();
    int lineSpacing = fm.lineSpacing();

    qDebug() << w;
    qDebug() << h << ascent << descent << leading;
    qDebug() << leading;
    qDebug() << descent;
    qDebug() << lineSpacing;

    int base = 500;

    painter.setFont(font);
    painter.drawText(0,base,str);


    //基线 红色
    painter.setPen(Qt::red);
    painter.drawLine(0,base,w,base);

    //高度线 绿色     height() = ascent()+descent()
    painter.setPen(Qt::green);
    painter.drawLine(0,base - h,w,base - h);

    //上升线 青色
    painter.setPen(Qt::cyan);
    painter.drawLine(0,base-ascent,w,base-ascent);

    //下沉线 蓝色
    painter.setPen(Qt::blue);
    painter.drawLine(0,base + descent,w,base + descent);

    QRect rect = fm.boundingRect(str);
    rect.moveTo(0,base-ascent);

    painter.fillRect(rect,QColor(123,123,123,123));
}

总结

本文仅仅简单介绍了QFontMetrics 中几种对作用于字体的函数:ascent(),descent(),height(),leading()和lineSpacing()。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值