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()。

  • 9
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QtAndroid::startActivity是一个Qt提供的Android平台相关功能的接口,用于在Qt应用程序中启动一个Android活动(Activity),即启动一个新的Android界面或打开一个已有的应用程序。它的主要作用是实现Qt应用与Android系统之间的交互。 使用QtAndroid::startActivity需要包含QtAndroidExtras模块,它提供了一些与Android平台相关的功能。 接口定义如下: ```c++ bool QtAndroid::startActivity(const QAndroidJniObject &intent, int requestCode = 0) ``` 其中,参数intent是一个QAndroidJniObject类型的对象,表示要启动的活动的意图(Intent),可以通过类似下面的代码创建: ```c++ QAndroidJniObject intent("android/content/Intent", "(Ljava/lang/String;)V", "android.intent.action.VIEW"); ``` 这里创建了一个意图,用于启动一个界面,实际上是启动了系统中已有的“浏览器”应用程序,其中"android.intent.action.VIEW"是启动浏览器应用程序的动作。 参数requestCode表示请求代码,用于标识启动活动的请求,可选参数,默认为0。如果启动活动时需要返回结果,则可以使用该参数,并在onActivityResult方法中根据requestCode进行处理。 需要注意的是,在使用QtAndroid::startActivity之前,需要先获取Activity的Java对象,例如: ```c++ QAndroidJniObject activity = QtAndroid::androidActivity(); ``` 然后再调用QtAndroid::startActivity方法启动活动。 总之,QtAndroid::startActivity是一个非常有用的接口,可以帮助我们在Qt应用中实现与Android系统的交互,如打开系统应用、调用系统服务、启动其他应用程序等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值