cool-retro-term字体列表API详解:如何获取和管理所有可用字体 📅 发布时间:2026/9/16 14:29:56 👁 浏览次数: cool-retro-term字体列表API详解如何获取和管理所有可用字体【免费下载链接】cool-retro-termA good looking terminal emulator which mimics the old cathode display...项目地址: https://gitcode.com/GitHub_Trending/co/cool-retro-termcool-retro-term 是一款复古 CRT 风格的终端模拟器内置 20 多种怀旧与现代等宽字体。本文详解它的字体列表 API如何通过FontManager与FontListModel获取、筛选和管理所有可用字体涵盖内置字体注册表、系统字体扫描、过滤规则与 QML 端调用方式。字体列表API的两大核心角色cool-retro-term 的字体体系由两个 C 类协作完成均在 app/main.cpp 中注册为 QML 类型类职责源码FontManager收集、筛选、切换字体发出字体变更信号fontmanager.hFontListModel以 Qt 列表模型形式暴露字体条目供 QML 下拉框绑定fontlistmodel.hFontListModel被声明为不可直接创建——它只能由FontManager内部生成保证了数据来源的唯一性。获取全部字体两个列表属性FontManager构造时会自动执行两次字体收集见 fontmanager.cpp内置字体通过populateBundledFonts()从应用资源中注册 Terminus、Hack、JetBrains Mono、Unscii 等 20 多种字体populateBundledFonts系统字体populateSystemFonts()借助QFontDatabase扫描系统已安装字体并只保留等宽fixed-pitch字体同时跳过与内置字体同名的家族避免重复retrieveMonospaceFonts、populateSystemFonts。合并后的完整清单通过两个只读属性对外暴露fontList全部字体的原始清单m_allFontsfilteredFontList按当前配置过滤后的清单这是界面实际使用的列表。每个字体条目的完整字段一条字体记录FontEntry包含 9 个字段FontEntry 定义字段含义name内部标识如TERMINESS_SCALED、HACKtext下拉框中展示的显示名source内置字体的资源路径系统字体为空baseWidth基础字宽低清字体会自动计算修正pixelSize原生像素高度低清字体为 8/11/16现代字体为 32lowResolutionFont是否为需放大的低分辨率像素字体isSystemFont是否来自系统familyQt 实际识别的字族名fallbackName字符缺失时的后备字体QML 侧通过模型的角色名role name访问这些字段角色映射见 roleNames()。获取单个字体详情get(index) 方法FontListModel提供了一个便捷的Q_INVOKABLE方法get(index)一次返回指定索引字体的完整属性字典get() 实现。它是 QML 里按下标取一条字体的标准入口var font appSettings.filteredFontList.get(currentIndex) appSettings.fontName font.name⚠️ 注意get()越界时返回空字典而非报错QML 侧建议先用count属性校验范围。过滤规则为什么有时列表里少了一些字体filteredFontList不是简单复制updateFilteredFonts()过滤逻辑按两层条件筛选来源过滤fontSource0只显示内置字体1只显示系统字体渲染模式过滤rasterization当渲染模式为Modern值 4时只显示高分辨率字体其余模式只显示低清像素字体系统字体不受此限制。 还有一个贴心的细节过滤后如果当前选中的字体不在新列表里会自动回退到列表第一项并发出fontNameChanged信号保证界面永不悬空。管理字体属性写入与变更信号FontManager的全部可写属性都会触发过滤 重算流水线以 setFontSource 为例属性作用范围/示例fontSource切换内置 / 系统字体0 / 1rasterization渲染模式Default、Scanlines、Pixels、Sub-Pixels、ModernfontName指定字体内部名TERMINESS_SCALED、HACK…fontScaling字号缩放滑块 0.75 起与baseFontScaling相乘生效fontWidth/lineSpacing字宽与行距0.5–1.5 / 0.0–1.0字体参数最终经由terminalFontChanged信号下发给终端渲染层updateComputedFontPreprocessedTerminal.qml 连接该信号并调用refresh()完成应用。内置字体速查表内部名显示名类型TERMINESS_SCALEDTerminess低清默认UNSCII_8_SCALED/UNSCII_16_SCALEDUnscii 8 / 16低清COMMODORE_64_SCALEDCommodore 64低清IBM_VGA_8x16IBM VGA 8x16低清HACK/FIRA_CODE/IOSEVKAHack / Fira Code / Iosevka现代高分辨率JETBRAINS_MONOJetBrains Mono现代高分辨率OPENDYSLEXICOpenDyslexic现代阅读障碍友好完整 20 余条注册见 populateBundledFonts字体文件位于 app/qml/fonts/。QML 实战字体下拉框是怎么接上的设置面板的Terminal页签是字体列表 API 的完整示范SettingsTerminalTab.qmlComboBox的model绑定appSettings.filteredFontListtextRole取text用户选中时调用get(currentIndex)并根据lowResolutionFont自动切换渲染模式——选高分字体自动进 Modern 模式选低清字体自动回到 Default通过Connections监听onTerminalFontChanged与onFilteredFontListChanged在字体列表变动时调用updateIndex()同步下拉框选中项。FontManager在 ApplicationSettings.qml 中创建并将filteredFontList等属性 alias 给全局appSettings因此任何 QML 文件都能访问。总结拿全量字体用fontManager.fontList拿界面可见列表用fontManager.filteredFontList按索引取详情用get(index)返回包含 9 个字段的字典改字体只需写fontName/fontSource/rasterization属性过滤与渲染参数重算全自动完成扩展新字体时在 fontmanager.cpp 中调用addBundledFont()注册一条FontEntry即可无需改动其他代码。掌握这套 API你就能轻松为 cool-retro-term 定制任何想要的复古字体体验 ️【免费下载链接】cool-retro-termA good looking terminal emulator which mimics the old cathode display...项目地址: https://gitcode.com/GitHub_Trending/co/cool-retro-term创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考