QT 字体

字体设计中,关于字体的高度和各类间距,有一套比较标准的术语和概念,通常用图示的形式来说明字体的纵向度量(metrics)及其相关间距。以下是常见的字体设计相关的各类高度和间距的概念解释:

1. 基线 (Baseline)

  • 字符在一行中的"站立"线,所有字母的底部(除一些下延字母如g,p,q,j等)都在该线上。

2. 字体高度相关指标(垂直度量)

名称 说明
Ascent(上升高度) 从基线向上的高度,通常是大写字母高度或大部分小写字母的最高点之处。
Descent(下降高度) 从基线向下的高度,用于表示下延字母的部分(例如 g, j, p, q)的延伸部分。
Leading(行间距) 行与行之间的最小间隔,等于行距减去字体高度(可视为行间的空白部分)。
Height(字体高度) 字体的总高度,通常等于 Ascent + Descent + 额外的行间距(或Leading)
Line Spacing(行距) 两行基线之间的距离,包含字体高度和行间距。

3. 字形相关指标(字体内部)

名称 说明
Cap Height (大写字母高度) 大写字母如 "H" 的高度,从基线到其顶端。
X-Height (小写x高度) 小写字母"x"的高度,代表大多数字母的中间高度,衡量字体的视觉大小。
Ascender (升部位) 字母如"b,d,h,k,l,t"中部分上升过基线的部分高度。
Descender (降部位) 字母如"g,j,p,q,y"中延伸到基线以下的部分高度。

字体高度及间距图示

scss 复制代码
text
        ┌──────────────────────────── Cap Height
        │     ┌────────────────── Ascent
        │     │
        │     │ 
───────┼─────┼──────────────────── Baseline (基线)
        │     │
        │     │
        │     └────────── Descent
        │
        └────────────── Leading (行距D中的附加间距)

举例说明:

  • 普通字体的 "Height" 代表字体从最高点到最低点的像素,高度=ascent+descent。
  • leading 是控制多行文本时各行之间额外的留白,避免行间文字重叠,保证阅读舒适。
  • cap heightx-height 影响字体视觉大小和字形特征,可用来调整字体的风格和可读性。

用Qt QFontMetrics 获取字体设计相关的指标

bash 复制代码
python
metrics.ascent()       # 返回上升高度
metrics.descent()      # 返回下降高度
metrics.height()       # 总高度 = 上升+下降+行间距
metrics.leading()      # 返回行间距
metrics.capHeight()    # 大写字母高度
metrics.xHeight()      # 小写字母x高度

总结

字体的各种间距设计,保证了字形的视觉美感、可读性以及多行排版的舒适度。理解这些参数,可以帮助你根据需求精细控制字体的布局和UI界面设计。

如果需要更直观的图示教程,可以参考字体设计相关的专业书籍或设计网站,很多都会配有详尽的字体结构图解和设计案例。

添加到后续问题

检查来源

  1. js.design/special/art...
  2. library.ttcdw.com/dev/upload/...
  3. cn.monotype-asia.com/resources/a...
  4. blog.csdn.net/quantum7/ar...
  5. m.zcool.com.cn/article/ZMT...
  6. www.nstc.gov.tw/nstc/attach...
  7. hgfonts.com/information...
  8. isux.tencent.com/articles/Ch...
  9. cn.monotype-asia.com/resources/a...
相关推荐
大厂码农老A7 分钟前
P10老板一句‘搞不定就P0’,15分钟我用Arthas捞回1000万资损
java·前端·后端
Pomelo_刘金16 分钟前
常见的幂等方案
后端
tonydf20 分钟前
Blazor Server项目里,集成一个富文本编辑器
后端
文心快码BaiduComate29 分钟前
文心快码已接入GLM-4.6模型
前端·后端·设计模式
RoyLin40 分钟前
C++ 原生扩展、node-gyp 与 CMake.js
前端·后端·node.js
Fency咖啡1 小时前
Spring Boot 3.x 开发 Starter 快速上手体验,通过实践理解自动装配原理
java·spring boot·后端
南方者1 小时前
【JAVA】【BUG】Java 开发中常见问题的具体示例,结合代码片段说明问题场景及原因
java·后端·debug
寻月隐君2 小时前
Rust 泛型编程基石:AsRef 和 AsMut 的核心作用与实战应用
后端·github
Java水解2 小时前
100道互联网大厂面试题+答案
java·后端·面试
用户8356290780512 小时前
使用Python自动化移除Excel公式,保留纯净数值
后端·python