新闻详情

新闻详情

首页 / 资讯中心 / 详情

NodeGui 中 QIconState 枚举解析:为 Qt 图标构建 Off/On 双状态

发布时间:2026/11/16 7:43:06来源:尧图网络
NodeGui 中 QIconState 枚举解析:为 Qt 图标构建 Off/On 双状态
桌面应用跨平台【免费下载链接】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 参考页 QIconState 展开系统讲解该枚举在图标体系中的定位、Off/On两个成员的语义、它在QIcon各方法中的参数默认值以及从 TypeScript 层到 C N-API 绑定的完整透传链路。读完后你将掌握如何基于QIconState为同一图标准备选中/未选中两套像素资源并理解 state 参数在整个调用链上是如何被逐层解析的。QIconState 的定义与成员QIconState是 NodeGui 对 QtQIcon::State内嵌枚举的 JavaScript 镜像定义在 QIcon.tsexport enum QIconState { Off, On, }两个成员含义对应 Qt 的QIcon::State成员数值语义Off0图标的关状态即默认、未激活、未选中形态On1图标的开状态即激活、选中、勾选形态Off与On的设计目标是让一个QIcon能够同时携带多套像素例如复选框/切换类控件的图标未勾选时用Off版本勾选后切换到On版本。该枚举通过 src/index.ts 从包入口统一导出使用时可直接require(nodegui/nodegui)后取用const { QIcon, QIconState } require(nodegui/nodegui);state 参数QIcon 上所有接受它的 APIQIconState本身只是一个两值枚举它的价值体现在QIcon类的多个方法签名中。对照 NodeGui 自动生成的类参考 QIcon 与源码 QIcon.ts共有 6 个方法接收state参数且默认值统一为QIconState.Off方法签名节选自源码state 默认值actualSizeactualSize(size: QSize null, mode QIconMode.Normal, state QIconState.Off): QSizeOffaddFileaddFile(fileName: string, size: QSize null, mode QIconMode.Normal, state QIconState.Off): voidOffaddPixmapaddPixmap(pixmap: QPixmap, mode QIconMode.Normal, state QIconState.Off): voidOffavailableSizesavailableSizes(mode QIconMode.Normal, state QIconState.Off): QSize[]Offpaintpaint(painter, x, y, w, h, alignment?, mode?, state?)Offpixmappixmap(width, height, mode QIconMode.Normal, state QIconState.Off): QPixmapOff值得注意的是pixmap的 JS 封装采用了宽参策略它接收width、height两个数字而不是QSize对象与 Qt 原生QPixmap pixmap(const QSize size, ...)的签名略有差异。这一适配在 C 侧也有对应处理见下文。构造一个带 On/Off 双状态的图标结合上面的 API一个典型的勾选状态图标构建流程如下基于源码中真实存在的方法组合可复制运行const { QIcon, QIconState, QIconMode, QPixmap, QSize, QApplication } require(nodegui/nodegui); const app new QApplication([]); // 需要 QApplication 支撑位图资源 // 同一个 QIcon 上挂两套像素未选中(Off) 与 选中(On) const icon new QIcon(); icon.addPixmap(new QPixmap(unchecked.png), QIconMode.Normal, QIconState.Off); icon.addPixmap(new QPixmap(checked.png), QIconMode.Normal, QIconState.On); // 查询某个状态下有哪些可用尺寸 const offSizes icon.availableSizes(QIconMode.Normal, QIconState.Off); const onSizes icon.availableSizes(QIconMode.Normal, QIconState.On); offSizes.forEach((s: QSize) console.log(Off size:, s.width, s.height)); // 按状态取位图不传 state 时默认取 Off 状态 const offPixmap icon.pixmap(64, 64, QIconMode.Normal, QIconState.Off); const onPixmap icon.pixmap(64, 64, QIconMode.Normal, QIconState.On); // 查询在给定目标尺寸下图标实际会被缩放到多大 const fitted icon.actualSize(new QSize(64, 64), QIconMode.Normal, QIconState.On); console.log(fitted size:, fitted.width, fitted.height);addFile与addPixmap是等价的资源注入方式前者直接从文件路径加载内部在 C 侧用QString::fromUtf8转码后调用QIcon::addFile后者接收已构造的QPixmap对象。若图标被设置为 mask 图标setIsMask(true)state 的选取会进一步参与 Qt 对蒙版图标的渲染路径这一点可从 qicon_wrap.cpp 中setIsMask的绑定得到印证。C 绑定层state 的透传与默认值处理NodeGui 的架构是JS 包装类 N-API 绑定 原生 Qt 对象三层结构。QIconState的数值在 qicon_wrap.cpp 中被static_castQIcon::State还原为 Qt 枚举例如actualSize的绑定L67-L80QIcon::State state static_castQIcon::State(info[2].AsNapi::Number().Int32Value()); QSize result this-instance-actualSize(*size, mode, state);addFileL82-L95、addPixmapL97-L108、availableSizesL110-L123、paintL163-L180均遵循同样的模式把 JS 数字参数按位宽转为Int32再强转为QIcon::State传给原生QIcon实例。有一个实现细节值得注意pixmap的 C 绑定对 mode/state 做了缺省即默认的兜底L132-L142QIcon::State state QIcon::Off; if (info.Length() 3) { int stateInt info[3].AsNapi::Number().Int32Value(); state static_castQIcon::State(stateInt); }也就是说即使绕过 JS 层默认参数直接调用底层方法state 缺失时也会落回QIcon::Off与文档声明的默认值QIconState.Off保持一致。这解释了为什么在 QIcon 的每个方法参数表中state一列的 Default 都是QIconState.Off。与 QIconMode 的协作关系state永远与mode成对出现。QIconMode定义于 QIcon.ts取值为Normal、Disabled、Active、Selected对应 Qt 的QIcon::Mode其参考页见 QIconMode。两者的正交组合意味着一个图标最多可以携带 4 种模式 × 2 种状态共 8 套像素。在 NodeGui 中图标通常经由控件 API 消费例如 QAbstractButton.setIcon 和 QAction.setIcon 只负责传入QIcon对象随后由 Qt 根据控件自身的选中/悬停等状态自动挑选合适的 mode/state 版本来绘制——这正是把On/Off两套资源注册进同一个QIcon的实际意义所在。测试用例中的验证仓库现有的 Jest 测试 QIcon.test.ts 覆盖了QIcon的构造与cacheKey行为it(initialize with string, () { const icon new QIcon(testImagePath); expect(icon).toBeTruthy(); }); it(returns the cache Key, () { const icon new QIcon(testImagePath); const cacheKey icon.cacheKey(); expect(Number.isInteger(cacheKey)).toBe(true); });当前测试未直接对QIconState.On的像素选取做断言这属于该测试集的覆盖边界若需要自证 state 生效可参照上文构造一个带 On/Off 双状态的图标一节比较两种状态下pixmap()返回结果或actualSize()的结果差异。小结与参考路径QIconState虽然只有Off、On两个成员但它是 NodeGui 图标 API 中双状态图标能力的开关位所有QIcon方法中 state 参数默认Off与QIconMode正交组合并在 C 绑定层被逐位还原为 Qt 的QIcon::State。核心参考路径汇总枚举定义src/lib/QtGui/QIcon.ts方法签名与默认值src/lib/QtGui/QIcon.tsC 绑定实现src/cpp/lib/QtGui/QIcon/qicon_wrap.cpp绑定声明src/cpp/include/nodegui/QtGui/QIcon/qicon_wrap.h类级 API 参考website/docs/api/generated/classes/qicon.md测试用例src/lib/QtGui/tests/QIcon.test.ts赞分享桌面应用跨平台【免费下载链接】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点击查看免费下载相关推荐Oralyzer与其他安全工具对比为什么它是Open Redirection检测的首选Oralyzer与其他安全工具对比为什么它是Open Redirection检测的首选 Open Redirection开放重定向漏洞是Web应用中常见NodeGui 中的 MovieState 枚举理解 QMovie 动图播放状态的完整指南NodeGui 中的 MovieState 枚举理解 QMovie 动图播放状态的完整指南 导读 MovieState 是 NodeGui 中用于描述 QMo桌面应用跨平台NodeGui 中 QAbstractItemViewSelectionBehavior 枚举详解控制 Item 视图的行、列与项选择行为NodeGui 中 QAbstractItemViewSelectionBehavior 枚举详解控制 Item 视图的行、列与项选择行为 本文围绕 Node桌面应用跨平台上一篇如何用 Atmosphere DNS.mitm 重定向并屏蔽指定服务器下一篇探索OSharp一站式.NET开发框架创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/15 4:54:16

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/15 2:04:12

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/14 10:11:15

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/16 6:47:19

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/14 16:35:50

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/15 4:06:36

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉