You need to enable JavaScript to run this app. 如何获取跨平台可用于SDL TTF的TTF字体列表
优惠活动
大模型
产品
解决方案
定价
更多

如何获取跨平台可用于SDL TTF的TTF字体列表

跨平台获取系统TTF字体列表的通用实现方案

方案1:分平台调用原生API实现(大部分软件采用的主流方案)

这个方案无需引入额外第三方依赖,运行效率最高,是VS Code、GIMP等软件的核心实现逻辑:

  • Windows平台:
    不要硬编码C:\\Windows\\Fonts路径,通过系统API直接获取正确的字体目录:
    1. 调用SHGetKnownFolderPath传入FOLDERID_Fonts获取系统级字体目录
    2. 调用SHGetKnownFolderPath传入FOLDERID_RoamingAppData,拼接\\Microsoft\\Windows\\Fonts获取用户级自定义字体目录
    3. 也可以直接调用EnumFontFamiliesExWAPI直接枚举所有已注册的字体,直接获取字体名和对应文件路径,无需自行遍历目录
  • Linux平台:
    无需自行遍历目录或多用户路径,直接使用所有桌面发行版默认预装的Fontconfig库的C API:
    1. 初始化Fontconfig上下文后调用FcFontList接口,可直接筛选出所有TTF格式字体的路径、字体家族名、样式等信息
    2. 编译时添加链接参数-lfontconfig,头文件引用<fontconfig/fontconfig.h>即可,无额外依赖
  • macOS平台:
    调用系统原生CoreText框架接口:
    1. 调用CTFontManagerCopyAvailableFontURLs直接获取所有系统可用字体的路径,自动覆盖系统级、用户级的所有字体目录
    2. 编译时添加链接参数-framework CoreText即可

方案2:直接使用封装好的开源库

如果不想自行编写平台分支代码,可以直接使用已经封装好的跨平台字体枚举库:

  • 单头文件实现:可直接引入开源的单头文件C/C++字体枚举库,无需额外编译依赖,已经封装了三个平台的原生接口调用逻辑
  • 若项目已使用GTK、Qt等框架,可直接使用框架内置的字体枚举接口:如Qt的QFontDatabase类、GTK的Pango库相关接口,一行代码即可获取完整字体列表

注意事项

  • 不要使用全盘搜索的方案,效率极低,且会遗漏部分自定义挂载路径的字体
  • 不要硬编码各系统的字体路径,不同用户的系统安装位置、自定义配置可能导致路径不一致,必须通过系统API读取

内容的提问来源于stack exchange,提问作者user2138149

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 03:06:00