桌面应用跨平台【免费下载链接】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 文档QSizePolicyPolicyFlag枚举页 qsizepolicypolicyflag.md展开系统讲解四个基础位标志GrowFlag、ExpandFlag、ShrinkFlag、IgnoreFlag的语义与取值并结合仓库源码说明这些标志如何通过按位或运算组合成QSizePolicyPolicy的七种策略最终经QWidget.setSizePolicy()的 TS 封装与 N-API 绑定透传到 Qt 原生层帮助读者在 nodegui 应用中正确控制组件在布局中“能否变大、能否缩小、是否抢占多余空间、是否忽略 sizeHint”的行为。一、四个基础标志GrowFlag、ExpandFlag、ShrinkFlag、IgnoreFlagQSizePolicyPolicyFlag是 nodegui 中描述尺寸策略的位标志枚举官方 API 文档中定义了以下四个成员及其取值标志取值语义GrowFlag1控件可以生长超过其 sizeHintsize hint即允许被布局放大ExpandFlag2当布局中存在多余空间时该控件应当优先获得这些额外空间主动膨胀ShrinkFlag4控件可以收缩到其 sizeHint 以下即允许被布局压缩IgnoreFlag8布局忽略控件的 sizeHint控件获得多少空间就占多少不表达自身偏好四个标志的取值1、2、4、8是连续的 2 的幂这是典型的位标志bit flag设计每个标志独占一个二进制位任意数量的标志可以通过按位或|组合编码出一种复合的尺寸行为。这正是 QtQSizePolicy::Policy的底层表示方式——nodegui 将其原样暴露为 TypeScript 枚举保证与 Qt 原生数值一一对应。二、标志的组合如何构成 QSizePolicyPolicy 的七种策略单个标志只是“行为片段”实际使用时通过组合得到完整的策略。在 nodegui 的源码 src/lib/QtWidgets/QSizePolicy.ts 中QSizePolicyPolicyFlag与QSizePolicyPolicy被定义在同一个文件里组合关系一目了然export enum QSizePolicyPolicyFlag { GrowFlag 1, ExpandFlag 2, ShrinkFlag 4, IgnoreFlag 8, } export enum QSizePolicyPolicy { Fixed 0, Minimum QSizePolicyPolicyFlag.GrowFlag, Maximum QSizePolicyPolicyFlag.ShrinkFlag, Preferred QSizePolicyPolicyFlag.GrowFlag | QSizePolicyPolicyFlag.ShrinkFlag, Expanding QSizePolicyPolicyFlag.GrowFlag | QSizePolicyPolicyFlag.ShrinkFlag | QSizePolicyPolicyFlag.ExpandFlag, MinimumExpanding QSizePolicyPolicyFlag.GrowFlag | QSizePolicyPolicyFlag.ExpandFlag, Ignored QSizePolicyPolicyFlag.ShrinkFlag | QSizePolicyPolicyFlag.GrowFlag | QSizePolicyPolicyFlag.IgnoreFlag, }按二进制位展开每种策略实际启用了哪些标志如下表对应生成的枚举页 qsizepolicypolicy.md策略标志组合位运算结果二进制行为解读Fixed—无标志0000既不可放大也不可缩小保持 sizeHint 大小MinimumGrowFlag1001只能放大不能缩小MaximumShrinkFlag4100只能缩小不能放大PreferredGrowFlag \| ShrinkFlag5101可放大也可缩小但不主动抢占多余空间ExpandingGrowFlag \| ShrinkFlag \| ExpandFlag7111可放大、可缩小且优先获得多余空间MinimumExpandingGrowFlag \| ExpandFlag3011不缩小但会抢占多余空间IgnoredGrowFlag \| ShrinkFlag \| IgnoreFlag131101完全交由布局决定sizeHint 被忽略从源码结构可以看出一个值得注意的细节Ignored 13并非单独由IgnoreFlag构成而是叠加了GrowFlag和ShrinkFlag。这符合 Qt 的语义——Ignore策略下布局既不会参考 sizeHint 作为下限也不会参考其作为上限因此“可增可减”两个标志同时置位IgnoreFlag只是声明“偏好信息无效”。这也提醒开发者标志位必须按 Qt 规定的组合方式使用随意手拼数值例如只传IgnoreFlag 8得到的是 Qt 未定义的非法策略。三、在 nodegui 中应用尺寸策略QWidget.setSizePolicy这两个枚举通过 src/index.ts 对外统一导出export { QSizePolicyPolicy, QSizePolicyPolicyFlag } from ./lib/QtWidgets/QSizePolicy;策略的实际入口是QWidget的setSizePolicy方法其 TypeScript 封装位于 src/lib/QtWidgets/QWidget.ts// TODO: void setSizePolicy(QSizePolicy) setSizePolicy(horizontal: QSizePolicyPolicy, vertical: QSizePolicyPolicy): void { this.native.setSizePolicy(horizontal, vertical); }该方法的签名接受两个参数分别是水平方向与垂直方向的策略二者相互独立可以为不同方向指定不同策略。一个典型的实际用法import { QMainWindow, QWidget, QSizePolicyPolicy, QLabel } from nodegui; const mainWindow new QMainWindow(); const label new QLabel(Hello nodegui); // 水平方向可放大、可缩小但不主动膨胀对应 GrowFlag | ShrinkFlag 5 // 垂直方向固定高度不随窗口拉伸 label.setSizePolicy(QSizePolicyPolicy.Preferred, QSizePolicyPolicy.Fixed); mainWindow.setCentralWidget(label); mainWindow.resize(400, 300); mainWindow.show();如果需要更精细地表达“该控件可以缩小但窗口变大时不要跟着变大”这类行为可以用标志组合出Maximum若要让某个面板像Expanding一样吸收所有剩余空间则使用Expanding。由于参数类型是QSizePolicyPolicy枚举TypeScript 编译期即可阻止传入非法数值——这正是把 Qt 位标志封装为 TS 枚举的收益。四、底层链路TS 枚举如何变成 Qt 的 QSizePolicyQWidget是 nodegui 中通过 C 宏批量绑定方法的组件其原生实现位于 src/cpp/include/nodegui/QtWidgets/QWidget/qwidget_macro.hNapi::Value setSizePolicy(const Napi::CallbackInfo info) { Napi::Env env info.Env(); QSizePolicy::Policy horizontal static_castQSizePolicy::Policy( info[0].AsNapi::Number().Int32Value()); QSizePolicy::Policy vertical static_castQSizePolicy::Policy( info[1].AsNapi::Number().Int32Value()); this-instance-setSizePolicy(horizontal, vertical); return env.Null(); }从这段绑定代码可以确认完整的调用链JS/TS 层setSizePolicy(QSizePolicyPolicy.Preferred, QSizePolicyPolicy.Fixed)传入的是两个数字5 和 0N-API 层qwidget_macro.h中的setSizePolicy从CallbackInfo取出两个参数读取其Int32Value()并static_cast为QSizePolicy::PolicyQt 原生层调用QWidget::setSizePolicy(horizontal, vertical)由 Qt 的布局系统据此参与后续的尺寸协商。由于 TS 枚举的值与 QtQSizePolicy::Policy的枚举值逐位一致Fixed0…Ignored13N-API 层只需一次整数强转即可完成转换无需任何映射表——这是QSizePolicyPolicyFlag数值与 Qt 原生值严格对齐的直接意义。该实例方法在 qwidget_macro.h 中通过InstanceMethod(setSizePolicy, WidgetWrapName::setSizePolicy)注册到QWidget的原生对象上与 TS 侧的this.native.setSizePolicy(...)调用一一对应。另外从 QWidget.ts 的源码注释可以看到// TODO: QSizePolicy sizePolicy() const——当前仓库尚未暴露读取已设置策略的sizePolicy()访问器只有设置方向是完整实现的。这意味着如果需要在运行时根据策略做条件判断只能在 JS 侧自行记录调用过的参数值。五、小结QSizePolicyPolicyFlag虽然只有四个成员GrowFlag1、ExpandFlag2、ShrinkFlag4、IgnoreFlag8但它构成了 nodegui 尺寸策略体系的基石它通过位运算组合出QSizePolicyPolicy的全部七种策略数值与 Qt 原生枚举逐位对齐见 QSizePolicy.ts使用入口是QWidget的setSizePolicy(horizontal, vertical)水平/垂直方向可独立配置底层经由 qwidget_macro.h 的 N-API 绑定以整数强转方式直通 Qt 的QSizePolicy::Policy官方枚举语义参考生成的 API 文档页 qsizepolicypolicyflag.md 与 qsizepolicypolicy.md。掌握这套标志位机制后在编写 nodegui 界面时就能精确控制每个组件在窗口伸缩、布局重排时的尺寸行为避免控件被意外压缩变形或无法填满剩余空间。赞分享桌面应用跨平台【免费下载链接】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 中的 QSizePolicyPolicy 枚举详解用尺寸策略精确控制 Qt 控件的伸缩行为NodeGui 中的 QSizePolicyPolicy 枚举详解用尺寸策略精确控制 Qt 控件的伸缩行为 在 NodeGui基于 Node.js 与 Qt桌面应用跨平台3分钟终极指南猫抓资源嗅探工具完整教程一键获取网页视频音频3分钟终极指南猫抓资源嗅探工具完整教程一键获取网页视频音频 还在为无法保存网页上的精彩视频而烦恼吗猫抓Cat Catch资源嗅探工具是你的救星这款开桌面应用跨平台Flet StackFit 详解Stack 非定位子控件的尺寸适配策略Flet StackFit 详解Stack 非定位子控件的尺寸适配策略 StackFit 是 Flet 中用于控制 Stack 控件内 非定位子控件 尺寸的枚前端跨平台桌面应用移动开发上一篇Laravel 集合导出FromCollection 接口与 Eloquent 模型集成下一篇StarRocks stddev/stddev_pop 总体标准差聚合函数详解语法、返回值与源码实现创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
cube-ui Picker 选择器组件完全指南:从单列到多列、别名配置与动态更新实战 前端UI组件移动开发 【免费下载链接】cube-ui :large_orange_diamond: A fantastic mobile ui lib implement by Vue 项目地址: https://gitcode.com/gh_mirrors/cu/cube-ui 点击查看 免费下载 Picker 是 cube-ui 中基于 create-api 实现的移动端选择器组件&#x… · 2026/9/25 3:12:41
TEN Framework 实战:webrtc_vad_cpp 扩展实现低延迟语音活动检测(VAD) 人工智能AI Agent多模态语音AI 应用 【免费下载链接】ten-framework Open-source framework for conversational voice AI agents 项目地址: https://gitcode.com/TEN-framework/ten-framework 点击查看 免费下载 本文基于 TEN Framework 官方扩展文档 README.ko-K… · 2026/9/25 3:12:41
技术博主暂停更新公告写作指南:从决策到复更的完整流程 如果你的项目日志停在了三个月前,仓库里还挂着几笔没合并的提交,私信里攒了二十几条"博主你还活着吗"——恭喜你,你在某个深夜打开编辑器,想写一篇暂停更新公告。写这篇东西之前,我在后台对着空白文档坐了半… · 2026/9/25 3:12:41
基于 MongoDB Atlas 搭建 Mage AI 数据源测试环境的实践指南 数据工程数据编排ETL任务调度批处理流处理数据集成后端 【免费下载链接】mage-ai 🧙 Build, run, and manage data pipelines for integrating and transforming data. 项目地址: https://gitcode.com/gh_mirrors/ma/mage-ai 点击查看 免费下载 MongoDB… · 2026/9/25 3:43:42
OptiScaler 完整指南:5 种方法在 DLSS、FSR、XeSS 之间自由切换并给游戏补帧 OptiScaler 完整指南:5 种方法在 DLSS、FSR、XeSS 之间自由切换并给游戏补帧 【免费下载链接】OptiScaler OptiScaler bridges upscaling/frame gen across GPUs. Supports DLSS2/XeSS/FSR2 inputs, replaces native upscalers, enables FSR-FG/XeFG on non-FG titl… · 2026/9/25 3:43:42
cuDF Java JAR 构建与发布流水线:基于 ci-wheel 容器的一站式打包实践 数据分析数据工程机器学习 【免费下载链接】cudf cuDF - GPU DataFrame Library 项目地址: https://gitcode.com/gh_mirrors/cu/cudf 点击查看 免费下载 cuDF 的 Java API 依赖一个内嵌静态 libcudf 的 JNI 层,其打包过程涉及静态库编译、Maven classi… · 2026/9/25 3:43:42
深入解析 Basic Computer Games 之 Poker:规则、AI 下注策略与移植注意事项 示例工程 【免费下载链接】basic-computer-games An updated version of the classic "Basic Computer Games" book, with well-written examples in a variety of common MEMORY SAFE, SCRIPTING programming languages. See https://coding-horror.github.io/basic… · 2026/9/25 3:43:36
创维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