ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

NodeGui 中 QFontStretch 枚举详解:QFont 字体伸展度的 10 级取值与 NAPI 绑定实现

NodeGui 中 QFontStretch 枚举详解:QFont 字体伸展度的 10 级取值与 NAPI 绑定实现 桌面应用跨平台【免费下载链接】nodeguiA library for building cross-platform native desktop applications with Node.js and CSS . React NodeGui : https://react.nodegui.org and Vue NodeGui: https://vue.nodegui.org项目地址https://gitcode.com/gh_mirrors/no/nodegui点击查看免费下载本文围绕 nodegui 自动生成 API 文档中的 QFontStretch 枚举展开逐一说明其 10 个枚举成员的数值含义与选型建议并结合 TypeScript 层的 QFont 封装与 C NAPI 绑定源码讲清楚字体伸展度stretch从 JavaScript 调用一路传递到 Qt 底层 setStretch 的完整链路帮助读者在 NodeGui 应用中正确控制字体横向比例并验证其渲染效果。QFontStretch 是什么QFontStretch 是 Qt 用来描述字体伸展度的枚举即字体相对于常规宽度的横向缩放比例以百分比整数表示。它随 QFont 一起工作通过 QFont 的 setStretch 设置伸展度用 stretch 读回当前值。在 nodegui 中该枚举由 TypeScript 侧定义并导出与 C 层注册的 NAPI 方法一一对应。枚举定义位于 QFont.ts并通过 index.ts 从包入口对外导出// src/lib/QtGui/QFont.ts export enum QFontStretch { AnyStretch 0, UltraCondensed 50, ExtraCondensed 62, Condensed 75, SemiCondensed 87, Unstretched 100, SemiExpanded 112, Expanded 125, ExtraExpanded 150, UltraExpanded 200, }完整枚举成员表以下 10 个成员即自动生成文档 qfontstretch.md 列出的全部内容数值与 Qt 官方字体伸展度标准一致单位为常规宽度的百分比枚举成员数值语义典型用途AnyStretch0任意伸展度不指定具体比例匹配时作为通配符使用UltraCondensed50特窄宽度为常规的一半极窄空间排版ExtraCondensed62特紧缩紧凑列表、数据密集界面Condensed75紧缩窄容器中的正文/标签SemiCondensed87半紧缩轻度压缩排版Unstretched100不伸展即常规宽度默认/常规显示SemiExpanded112半展开轻度加宽Expanded125展开宽度为常规的 1.25 倍标题、展示性文字ExtraExpanded150特展开强调性大标题UltraExpanded200特宽宽度为常规两倍艺术化/极端展示可以推断这一取值序列的设计意图是以 100Unstretched为基准向窄50、62、75、87和宽112、125、150、200两个方向对称分级同时用 0AnyStretch表示不约束的匹配状态。TypeScript 层 APIsetStretch 与 stretchnodegui 的 QFont 类在 QFont.ts 中提供了成对的读写方法直接透传到原生对象// src/lib/QtGui/QFont.ts setStretch(factor: QFontStretch): void { this.native.setStretch(factor); } stretch(): QFontStretch { return this.native.stretch(); }使用示例创建一个指定族名与字号的 QFont设置伸展度后交给 QLabel并用 stretch 读回校验import { QApplication, QLabel, QFont, QFontStretch } from nodegui; const app new QApplication([]); const font new QFont(Helvetica, 18); font.setStretch(QFontStretch.Condensed); // 75% 宽度 const label new QLabel(NodeGui font stretch demo); label.setFont(font); console.log(font.stretch() QFontStretch.Condensed); // true label.show(); app.exec();需要注意setStretch 接收的是枚举底层即数字但原生侧并不校验传入值是否落在上述 10 个合法成员内传入任意整数都会直接透传给 Qt详见下文原生实现。因此建议始终使用 QFontStretch 枚举成员避免裸数字带来的可读性与正确性问题。C NAPI 绑定层实现字体伸展度跨语言传递的完整实现位于 qfont_wrap.cpp。setStretch 将 JS 数字参数转为 int32 后直接调用 Qt 的 QFont::setStretchstretch 则把原生返回值转回 JS 数字// src/cpp/lib/QtGui/QFont/qfont_wrap.cpp Napi::Value QFontWrap::setStretch(const Napi::CallbackInfo info) { Napi::Env env info.Env(); int factor info[0].AsNapi::Number().Int32Value(); this-instance-setStretch(factor); return env.Null(); } Napi::Value QFontWrap::stretch(const Napi::CallbackInfo info) { Napi::Env env info.Env(); return Napi::Value::From(env, this-instance-stretch()); }对应的方法注册在同文件的 QFontWrap::init 中setStretch 与 stretch 作为实例方法被 DefineClass 暴露到 Node 侧qfont_wrap.cpp类头文件声明见 qfont_wrap.h。从源码结构看QFont 的 NAPI 绑定只持有 std::unique_ptr 实例并在析构时释放qfont_wrap.cpp 第 61 行枚举值在跨边界时按裸 int 32 传递没有额外的映射或合法性检查——这与同文件中 setWeight、setCapitalization 的处理方式一致。这意味着 TypeScript 层的 QFontStretch 枚举实际上是文档化的常量表类型安全由 TS 编译器保证运行时行为完全由 Qt 决定。与 QFontMetrics 联动验证拉伸效果修改伸展度后最直接的可验证依据是字体度量。nodegui 提供了 QFontMetrics / QFontMetricsF 封装测试用例 QFontMetrics.test.ts 展示了围绕 Helvetica 构造 QFont 并读取 averageCharWidth、horizontalAdvance 等度量值的完整模式import { QFont, QFontStretch, QFontMetrics } from nodegui; const condensed new QFont(Helvetica, 16); condensed.setStretch(QFontStretch.UltraCondensed); const normal new QFont(Helvetica, 16); normal.setStretch(QFontStretch.Unstretched); const mc new QFontMetrics(condensed); const mn new QFontMetrics(normal); // horizontalAdvance 返回指定文本的水平推进宽度 console.log(mc.horizontalAdvance(NodeGui) mn.horizontalAdvance(NodeGui));若目标字体族确实提供了对应的 Condensed/Expanded 字面变体上述比较会返回 true若字体族只有一种宽度Qt 可能无法真正渲染出差异。因此验证时应结合 QFontDatabase 查询当前系统实际可用的字体族QFontDatabase.ts这一点与测试中Helvetica is Qts default sans-serif font的注释背景一致度量结果依赖运行平台已安装的字体。适用前提与限制本文基于当前仓库的 TypeScript 封装与 C 绑定源码适用于通过 npm 安装 nodegui 并使用 QFont 的场景枚举数值与 Qt 的 QFont::Stretch 保持一致。伸展度能否产生可见效果取决于所选字体族是否包含相应宽度的变体跨平台Windows/macOS/Linux字体可用性不同效果可能不一致。任何数值均可透传给底层 Qt但只有表中 10 个枚举值具有明确的语义生产代码应使用枚举成员而非字面量。赞分享桌面应用跨平台【免费下载链接】nodeguiA library for building cross-platform native desktop applications with Node.js and CSS . React NodeGui : https://react.nodegui.org and Vue NodeGui: https://vue.nodegui.org项目地址https://gitcode.com/gh_mirrors/no/nodegui点击查看免费下载相关推荐NodeGui 中 QFontCapitalization 字体大小写样式枚举5 个取值、绑定原理与实战用法NodeGui 中 QFontCapitalization 字体大小写样式枚举5 个取值、绑定原理与实战用法 本篇技术指南围绕 NodeGui 的 QFont桌面应用跨平台NodeGui QUrl ParsingMode 枚举详解URL 解析模式的取值、默认值与原生桥接实现NodeGui QUrl ParsingMode 枚举详解URL 解析模式的取值、默认值与原生桥接实现 NodeGui 对 Qt 的 QUrl 类提供了完整的桌面应用跨平台Flet geolocator 扩展 GeolocatorPositionAccuracy 定位精度枚举详解从枚举值到平台底层实现Flet geolocator 扩展 GeolocatorPositionAccuracy 定位精度枚举详解从枚举值到平台底层实现 GeolocatorPos前端跨平台桌面应用移动开发上一篇Switch虚拟Amiibo模拟器emuiibo从零开始构建你的数字收藏库下一篇差分数组加速下的区间更新与受限跳跃查询Cosmos 仓库 CodeChef HILLJUMP 题解全解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表