本页内容

Qt Distance Field Generator 手册

如果应用程序的用户界面包含大量文本,则在首次向用户显示时,可能会对性能造成微小但可察觉的影响。如果文本使用多种不同的字体渲染,或者包含大量不同的字符(例如汉字等书写系统中常见的情况),这种情况尤为明显。

原因在于,为了后续高效地渲染文本,Qt 会花费一定时间为每个字形创建图形资源,以便日后重复使用。这一过程发生在字形首次在场景中显示时。

对于希望优化启动性能的高级用户,只要使用的渲染类型是 `Text.QtRendering`,就可以预生成此字体缓存。可以使用 `Qt Distance Field Generator ` 工具预生成缓存,既可以针对字体中的所有字形,也可以仅针对已知会在关键阶段显示的选定字形。

注意:这是一项 供高级用户使用的工具,用于以 Qt 无法自动实现的方式优化应用程序。对于大多数常见用例,Qt 的默认行为已足够满足需求。

Qt Distance Field Generator用户界面

一般用法

请按以下方式使用“Qt Distance Field Generator ”:

  • 通过“文件>打开字体”加载字体文件。如果字体文件较大,在读取字体并生成距离字段时需要等待一段时间。
  • 完成上述操作后,选择您希望保存在预生成缓存中的字形。理想情况下,这些应是您的应用程序在性能关键阶段所使用的字形,这样提前生成才能对性能产生显著提升。
  • 最后,点击“保存”以保存新的字体文件。

注意:若要以 这种方式修改字体,您需要确保其许可协议未禁止此操作。

选择字形

可以通过多种方式选择字形。最简单的方法是点击字形网格来选择特定的字形。再次点击该字形即可取消选择。

此外,您还可以使用 Unicode 范围列表来选择所有与特定范围内的字符相匹配的字形。

如果您希望确保预先生成用户界面中特定字符串对应的字形,可以使用“选择”>“选择字符串”功能。

注意: 后两种选择方法均基于 字体中的 CMAP 表,不会进行任何字形调整。

使用文件

准备好文件后,下一步就是将其加载到应用程序中。 保存的文件是原始字体文件的副本,因此可以像其他任何字体文件一样使用。此外,它还包含一个特殊的字体表,该表可被 Qt XML 识别,并在Qt Quick 中使用该字体时用于预填充字形缓存。

例如,您可以在应用程序代码中使用FontLoader 加载该字体。当将其用于在Text 元素中显示文本,且renderType 设置为Text.QtRendering (默认值)时,预生成的缓存将被加载并使用。

性能测量

若要分析距离场生成对应用程序的影响,可将环境变量 `QT_LOGGING_RULES ` 设置为 `"qt.scenegraph.time.glyph=true"`。

当使用没有内置缓存的普通字体时,输出结果将类似于以下内容:

qt.scenegraph.time.glyph: distancefield: 50 glyphs prepared in 16ms, rendering=15, upload=1

如果您已预生成所有正在使用的字形,输出结果则会类似于以下内容:

qt.scenegraph.time.glyph: distancefield: 50 pre-generated glyphs loaded in 2ms

在此情况下,用于渲染应用程序所需的距离场准备时间已从一个完整帧(16 毫秒)缩短至 2 毫秒。您还可以利用输出结果验证所有正在使用的字形是否均从缓存中加载,并从性能角度识别应用程序生命周期中存在问题的阶段。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.