桌面应用跨平台【免费下载链接】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点击查看免费下载导读ComponentFormattingOption是 NodeGui 暴露给 TypeScript 开发者的一组位标志bit flags枚举用于精确控制QUrl各组件路径、主机名、查询串、片段等在读取时的百分号编码percent-encoding与解码行为。本文以该枚举为核心结合 QUrl 的 TypeScript 封装 与 C 原生绑定实现系统讲解每个选项的位值、语义、默认值分布、组合用法与典型场景帮助你写出编码行为可预期的 URL 处理代码。一、ComponentFormattingOption 是什么ComponentFormattingOption是 NodeGui 对 QtQUrl::ComponentFormattingOptions的 TypeScript 映射定义在 src/lib/QtCore/QUrl.ts 中。它解决的核心问题是同一个 URL 的某个组成部分如path、query、host以不同格式被读取时应该返回什么。例如 URLhttps://example.com/hello%20world?q%E4%B8%AD中的%20和%E4%B8%AD是原样返回编码形式还是解码为hello world与中文字符这取决于传入QUrl读取方法的 options 参数。在 NodeGui 中该枚举随QUrl类一同从 src/index.ts 导出可直接通过import { ComponentFormattingOption, QUrl } from nodegui/nodegui引入。所有选项都是按位组合的整数值可以像下面这样叠加使用import { QUrl, ComponentFormattingOption } from nodegui/nodegui; const url new QUrl(https://example.com/a b?q%C3%A9#frag); // 组合多个标志 const path url.path(ComponentFormattingOption.EncodeSpaces | ComponentFormattingOption.EncodeUnicode); console.log(path); // 输出 /a%20b二、八个枚举成员的位值与语义下表完整列出所有成员及其十六进制位值与文档 componentformattingoption.md 和源码一一对应枚举成员位值十六进制十进制语义PrettyDecoded0x00以美化形式返回组件大部分百分号编码被解码具体行为随组件和 Qt 版本而异是多数读取方法的默认值EncodeSpaces0x1000001048576将空格保留为编码形式%20EncodeUnicode0x2000002097152将非 US-ASCII 字符保留为 UTF-8 百分号编码如é编码为%C3%A9EncodeDelimiters0x400000 \| 0x80000012582912将某些分隔符保留为编码形式具体受影响的分隔符随组件不同而不同该标志在toString()与toEncoded()中无效EncodeReserved0x100000016777216将规范不允许出现在 URL 中的 US-ASCII 字符保留为编码形式这是toString()和toEncoded()的默认行为DecodeReserved0x200000033554432解码 URL 规范不允许直接出现的 US-ASCII 字符这是各组件 getter 的默认行为之一FullyEncodedEncodeSpaces \| EncodeUnicode \| EncodeDelimiters \| EncodeReserved31850496将所有字符保留为恰当的编码形式如同该组件作为 URL 一部分出现配合toString()使用时可产生完全合规的 URL 字符串结果与toEncoded()完全一致FullyDecodedFullyEncoded \| DecodeReserved \| 0x400000075497472尽可能解码一切包括控制字符U0000 至 U001F与百分号编码中的 UTF-8 序列使用该模式可能导致数据丢失关键点解读PrettyDecoded是默认值authority()、fragment()、query()、userInfo()、toDisplayString()等方法的默认参数都是它。它给出人读友好的返回结果。FullyDecoded的默认使用fileName()、host()、password()、path()、userName()默认使用FullyDecoded尽量返回解码后的原始内容。FullyEncoded与FullyDecoded是复合标志前者由四个编码类标志位或运算而来后者在前者基础上再叠加DecodeReserved与0x4000000解码控制字符二者互为最大编码与最大解码的两极。数据丢失警告FullyDecoded会解码百分号序列若原始 URL 中某部分恰好以字面%开头并非编码序列解码后信息无法还原。源码注释明确提示 Use of this mode may cause data loss。三、选项在 QUrl 各读取方法中的默认值分布NodeGui 的 QUrl 封装 为每个接收 options 的读取方法都设定了默认值这在 QUrl 类文档 中也有完整记录方法默认值说明authority(options?)PrettyDecoded返回 authority 部分fileName(options?)FullyDecoded返回文件名不含目录fragment(options?)PrettyDecoded返回#后的片段host(options?)FullyDecoded返回主机名password(options?)FullyDecoded返回密码path(options?)FullyDecoded返回路径query(options?)PrettyDecoded返回查询串userInfo(options?)PrettyDecoded返回用户信息userName(options?)FullyDecoded返回用户名toString(options?)EncodeReserved返回完整 URL 字符串toDisplayString(options?)PrettyDecoded返回人类可读展示形式从源码结构可以推断设计意图面向网络传输的完整 URL 输出toString/toEncoded默认偏向保留编码EncodeReserved而面向用户展示与取值的组件 getter 默认偏向解码PrettyDecoded或FullyDecoded。需要特别注意的是toString()的约束——QUrl.ts 中注明FullyDecoded不允许传入toString()因为它会产生歧义数据解码后的空格、#、?等会破坏 URL 结构。四、C 原生层的实现原理ComponentFormattingOption的值最终在 C 层被转换为 Qt 原生枚举QUrl::ComponentFormattingOptions。在 qurl_wrap.cpp 中每个读取方法都执行同一种转换模式Napi::Value QUrlWrap::path(const Napi::CallbackInfo info) { Napi::Env env info.Env(); QUrl::ComponentFormattingOptions input0 (QUrl::ComponentFormattingOptions)info[0].AsNapi::Number().Int32Value(); return Napi::String::New(env, this-instance-path(input0).toStdString()); }以path、host、query、userInfo、fileName、password、userName、fragment、authority为代表的方法qurl_wrap.cpp 等都通过Int32Value()取出 JS 数值并强转为 Qt 位标志集合随后直接调用底层QUrl对应方法。这意味着TypeScript 层的枚举值与 Qt 的位值逐位一致不存在二次映射多个标志的按位或组合在 JS 侧计算后作为一个 32 位整数整体传给原生层原生层不校验标志合法性越界值的行为由 Qt 自身决定。toString()在绑定层有两份注册QUrlWrap::init 中toString与toString_withOpts均绑定到同一个 C 实现TypeScript 侧 toString(options?) 通过参数个数区分是否传 options——有参时调用toString_withOpts无参时调用无参toString。五、实战结合 QUrl 的完整示例下面的示例展示了如何在实际的 NodeGui 桌面应用中组合使用ComponentFormattingOption与QUrlimport { QUrl, ComponentFormattingOption, ParsingMode } from nodegui/nodegui; // 构造 URL第二个参数是 ParsingMode默认 TolerantMode const url new QUrl( https://user:passexample.com:8080/文档/hello world?q%E4%B8%AD%E6%96%87#sec%201, ParsingMode.TolerantMode, ); // 默认值path 默认 FullyDecodedquery 默认 PrettyDecoded console.log(url.path()); // /文档/hello world console.log(url.query()); // q中文 console.log(url.host()); // example.com // 显式指定保留编码形式 const encodedPath url.path( ComponentFormattingOption.EncodeSpaces | ComponentFormattingOption.EncodeUnicode, ); console.log(encodedPath); // /%E6%96%87%E6%A1%A3/hello%20world // 完整编码输出等价于 toEncoded() const fully url.toString(ComponentFormattingOption.FullyEncoded); console.log(fully); // https://user:passexample.com:8080/%E6%96%87%E6%A1%A3/hello%20world?q%E4%B8%AD%E6%96%87#sec%201 // 自定义组合仅处理空格不动 Unicode const spacesOnly url.path(ComponentFormattingOption.EncodeSpaces); console.log(spacesOnly); // /文档/hello%20world // adjusted() 也可接受格式化选项返回调整后的新 QUrl const stripped url.adjusted(0x400); // StripTrailingSlash console.log(stripped.toString());典型场景建议展示给用户使用默认的PrettyDecoded或FullyDecoded让中文、空格以可读形式出现构造 HTTP 请求 / 拼接链接使用FullyEncoded或显式组合EncodeSpaces | EncodeUnicode | EncodeReserved保证输出是规范合规的编码 URL合法性校验用ParsingMode.StrictMode构造再配合url.isValid()判断文件路径互转QUrl.fromLocalFile(path)与url.toLocalFile()配合本地文件场景QUrl.ts。六、测试验证与扩展阅读仓库中的 QUrl.test.ts 验证了 QUrl 的基础行为空构造、字符串构造、setUrl后toString()往返一致、QVariant互转。测试表明toString()输出与输入 URL 完全一致这正对应toString默认EncodeReserved的保留编码语义——普通 ASCII URL 不产生额外变换。若想深入理解枚举完整定义src/lib/QtCore/QUrl.ts原生绑定实现src/cpp/lib/QtCore/QUrl/qurl_wrap.cpp同类枚举ParsingMode容错/严格/解码三种解析模式与UrlFormattingOption控制整个 URL 输出的移除类标志也定义在 QUrl.ts 中ComponentFormattingOption只负责单个组件内部的编码格式生成文档componentformattingoption.md 与 QUrl 类文档。总结ComponentFormattingOption是 NodeGui 中控制 URL 组件编码粒度的核心枚举PrettyDecoded默认美化解码、EncodeSpaces、EncodeUnicode、EncodeDelimiters、EncodeReserved逐级控制编码对象FullyEncoded与FullyDecoded提供两极的复合快捷方式。理解每个成员的位值与默认值分布即可在人读友好与机器合规之间精确切换避免因编码不一致导致的请求失败或 URL 解析错误。赞分享桌面应用跨平台【免费下载链接】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 中 QUrl 完全指南基于 Qt 的跨平台 URL 解析、格式化与本地文件路径转换NodeGui 中 QUrl 完全指南基于 Qt 的跨平台 URL 解析、格式化与本地文件路径转换 QUrl 是 NodeGui基于 Node.js 与 Q桌面应用跨平台NodeGui QUrl ParsingMode 枚举详解URL 解析模式的取值、默认值与原生桥接实现NodeGui QUrl ParsingMode 枚举详解URL 解析模式的取值、默认值与原生桥接实现 NodeGui 对 Qt 的 QUrl 类提供了完整的桌面应用跨平台NodeGui 中 TabPosition 枚举详解控制 QTabWidget 标签栏位置的完整指南NodeGui 中 TabPosition 枚举详解控制 QTabWidget 标签栏位置的完整指南 本文基于 NodeGui 仓库中自动生成的 API 文档桌面应用跨平台上一篇PigeonPod订阅管理指南智能筛选与批量下载功能详解下一篇genshin-wish-export 错误排查手册常见错误代码与解决方法创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
VidBee 视频格式转换实操指南:3 种容器 2 种字幕导出,一次搞定 MP4/MKV 输出 VidBee 视频格式转换实操指南:3 种容器 2 种字幕导出,一次搞定 MP4/MKV 输出 【免费下载链接】VidBee Download video and audio from YouTube , TikTok , Twitter , Instagram , Facebook , Twitch , Bilibili , and 1000 sites—or import local media… · 2026/9/25 3:00:02
基于NSGA-II的外转子开关磁阻电机多目标优化与Matlab画图实践 最近在搞外转子开关磁阻电机(ER-SRM)的优化设计,拿NSGA-II跑多目标,过程中踩了不少坑,也整理了不少好用的Matlab画图代码。这篇文章就把整个从问题建模到算法实现再到结果可视化的过程完整拆一遍,重点解决两… · 2026/9/25 3:00:02
BullMQ Elixir 队列事件订阅实战指南:基于 Redis Streams 的实时任务生命周期监控 后端消息队列任务调度 【免费下载链接】bullmq BullMQ - Message Queue and Batch processing for NodeJS, Python, .NET, Elixir, Rust and PHP based on Redis or PostgreSQL 项目地址: https://gitcode.com/gh_mirrors/bu/bullmq 点击查看 免费下载 导读
本指南… · 2026/9/25 3:00:02
为什么地址是0x13?深入解析ps2-controller背后PS2手柄I2C通信原理 为什么地址是0x13?深入解析ps2-controller背后PS2手柄I2C通信原理 【免费下载链接】ps2-controller 源师兄扩展项目: PS2 | 由源师兄组织创建 项目地址: https://gitcode.com/yuanshixiong/ps2-controller
在 ps2-controller 这款源师兄出品的 PS2 手柄 I2C … · 2026/9/25 3:29:40
华为云与腾讯云怎么选?从云原生到信创的全场景决策指南 前阵子有个朋友找我做选型咨询,他们要做一个面向连锁餐饮企业的数据分析中台,既要卖软件又要做交付,甲方那边点名要“信创”。朋友打开两个网页问我:华为云和腾讯云到底差在哪?参数表我看得头晕,你直接告诉… · 2026/9/25 3:29:40
PCI简易通讯控制器黄标修复全指南 1. 黄色感叹号不是故障,而是Windows在向你发求救信号“PCI简易通讯控制器”这个名称听起来很陌生,但只要你打开设备管理器,展开“系统设备”或“其他设备”,大概率会看到它——一个带着黄色感叹号的灰色图标,名字里带着… · 2026/9/25 3:29:34
JobOps AI Provider配置终极对比:OpenAI、Claude还是Ollama本地部署免费方案 JobOps AI Provider配置终极对比:OpenAI、Claude还是Ollama本地部署免费方案 【免费下载链接】job-ops job-ops: DevOps principles applied to job hunting. A self-hosted pipeline to track, analyze, and assist your application process 项目地址: https://… · 2026/9/25 3:29:34
JVM执行引擎解析:解释器与JIT编译器优化实战 1. JVM执行引擎的双剑合璧:解释器与JIT编译器第一次接触Java时,我就被"一次编写,到处运行"的特性所吸引。直到深入JVM内部,才发现这个魔法背后是解释器与JIT编译器这对黄金搭档的完美配合。在实际工作中,我经… · 2026/9/25 3:29:28
OpenUsage如何把Token日志算成美元?模型定价引擎深度解析 OpenUsage如何把Token日志算成美元?模型定价引擎深度解析 【免费下载链接】openusage Burning through your subscriptions too fast? Paying for stuff you never use? Stop guessing. OpenUsage is free and open source. 项目地址: https://gitcode.com/gh_m… · 2026/9/25 3:29:28
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37