React NodeGui 入门教程:用 React 和原生 Qt 组件构建跨平台桌面应用
桌面应用跨平台【免费下载链接】react-nodeguiBuild performant, native and cross-platform desktop applications with native React powerful CSS like styling.项目地址https://gitcode.com/gh_mirrors/re/react-nodegui点击查看免费下载React NodeGui 是一款面向桌面端的 React 渲染器它不用 HTML、CSS 与浏览器而是让 React 直接驱动由 Qt 创建的原生窗口与原生控件。本文以官方入门教程website/docs/guides/tutorial.md为核心脉络带你从零理解 React NodeGui 应用的基本结构、Window等组件的底层原理并跑通官方 starter 项目读完你将能够独立搭建第一个原生桌面应用并知道下一步如何深入样式与布局。React NodeGui 开发一句话概括在开发层面一个 React NodeGui 应用本质上就是一个Node.js 应用。它没有自己的包管理器、没有特殊的运行时要求一切从一个与普通 Node.js 模块完全一致的package.json开始。一个最基础的 React NodeGui 应用只需要两个文件your-app/ ├── package.json ├── index.js所有 React NodeGui 提供的 API 和功能都通过nodegui/react-nodegui与nodegui/nodegui两个模块暴露用法与require任何普通 Node.js 模块完全一致require(nodegui/react-nodegui);与此同时整个 Node.js 标准库和 npm 生态中任意可用的 Node 模块都可以直接在 React NodeGui 应用中使用——这一点在本教程的后面会再次强调。在仓库中可以看到nodegui/react-nodegui的入口文件 src/index.ts 就是一张完整的“导出清单”它把Window、View、Text、Button、CheckBox等组件以及Renderer、useEventHandler、热重载工具hot、appProxy全部按命名空间方式导出。也就是说教程中所说的“nodegui/react-nodegui模块在命名空间中导出组件和功能”在源码层面有着清晰的一一对应。第一个最小应用用Window组件开一个窗口教程给出的最简应用是一个函数式 React 组件配合Renderer.render完成渲染const { Window, Renderer } require(nodegui/react-nodegui); const App () { return Window/Window; }; Renderer.render(App /);这里的index.js或main.js职责很明确创建窗口并处理应用可能遇到的所有系统事件。值得展开的是Renderer.render这一步。查看 src/renderer/index.ts 的实现可以发现它内部做了两件事通过reconciler.createContainer(containerInfo, isConcurrent, hydrate)创建 React 的根 Fiber 节点当前实现开启了 concurrent 模式通过reconciler.updateContainer(element, Renderer.container, parentComponent, callback)启动协调reconciliation并真正渲染结果。这正是 React NodeGui 之所以“是 React”的底层原因它基于react-reconciler实现了一套自定义 host config。在 src/reconciler/index.ts 中可以看到完整的宿主配置包括createInstance、appendChild、removeChild、commitUpdate等生命周期回调组件则通过 src/components/config.ts 中的registerComponent注册进一个tagName → ComponentConfig映射表由 reconciler 按标签名查表创建对应原生控件。这套机制与 React DOM、React Native 属于同一类架构只是把“宿主环境”从浏览器换成了 Qt。这里到底发生了什么教程用一节专门回答了“Whats going on here”核心结论有三点值得逐条结合源码印证第一你运行的是 Node.js 应用而不是浏览器应用。因此 React NodeGui 应用里没有document、window浏览器全局对象等任何浏览器 API你看到的窗口是 Qt 创建的原生窗口控件而不是一个被浏览器包裹的 HTML 页面。第二Window组件本质上是一个轻量级 JavaScript 包装器。查看 src/components/Window/RNWindow.ts 可以看到RNWindow类直接继承自 NodeGui 的QMainWindow而QMainWindow内部就是 Qt 的QMainWindowexport class RNWindow extends QMainWindow implements RNWidget { setProps(newProps: WindowProps, oldProps: WindowProps): void { setWindowProps(this, newProps, oldProps); } ... static tagName mainwindow; }这意味着你在 JSX 里给Window设置的每一个 propwindowTitle、minSize、styleSheet、menuBar等最终都会作用到那个真实的原生窗口控件上。setWindowProps中的 setter 会把 prop 映射为对应的 Qt 方法调用例如menuBar对应window.setMenuBar(menubar)见 src/components/Window/RNWindow.ts。第三相比浏览器方案它非常轻量离操作系统更近。因为控件就是系统级的原生控件没有 DOM、没有浏览器渲染引擎这一层间接成本。顺便一提RNWindow对子节点有明确的约束它只允许一个 central widget 和一个 menu bar多子节点或第二个菜单栏会打印警告见 src/components/Window/RNWindow.ts这一点在写布局时值得留意。在 React NodeGui 中任何组件类的命名都遵循RN前缀如RNView、RNText并实现RNWidget接口setProps、appendChild、removeChild等static tagName则标明它在 JSX 中的标签名。跑通官方 Starter 项目最快体验 React NodeGui 的方式是克隆并运行官方 starter 仓库nodegui/react-nodegui-starter。前提条件需要安装 Git 与 npm并且本机已配置好 Node.js 与 npm 环境node -v、npm -v能正常输出版本号。按以下步骤操作# 克隆仓库 $ git clone https://github.com/nodegui/react-nodegui-starter # 进入仓库目录 $ cd react-nodegui-starter # 安装依赖 $ npm install # 运行 dev server负责编译与热更新 $ npm run dev # 在另一个终端标签页或窗口中启动应用 $ npm startnpm run dev与npm start的职责划分可以从当前仓库的 package.json 中看到同类脚本的影子dev脚本执行tsc qode ./dist/demo.js即先编译 TypeScript再用 NodeGui 专用运行时qode加载编译产物而start则负责真正拉起应用进程。两个命令通常需要分开的终端窗口同时运行。克隆下来后你可以直接修改 starter 里的组件代码并观察窗口实时变化——这就完成了你的第一个 React NodeGui 应用。除了基本窗口还有什么React NodeGui 内置了一批与 Web 世界概念对应的基础组件。教程点名的有View—— 类似 Web 中的div用于包裹其他组件、组织结构。在 src/components/View/RNView.ts 中可以看到RNView直接继承 Qt 的QWidget并且会在添加第一个子节点时自动创建FlexLayout来管理布局——这是后面学习 布局指南 时的重要前提。CheckBox、PushButton即Button等交互控件。完整列表见 src/index.ts 的导出项包括BoxView、GridView含GridRow/GridColumn、Slider、Text、Image、AnimatedImage、LineEdit、PlainTextEdit、Calendar、ProgressBar、RadioButton、Dial、SpinBox、ScrollArea、ComboBox、SystemTrayIcon、Tabs/TabItem、各类对话框Dialog、ColorDialog、FileDialog、FontDialog、InputDialog、ProgressDialog、ErrorPrompt、Table/TableItem、List/ListItem、Menu/MenuBar等 30 余个组件。每个组件的可用 prop 定义在其对应接口中例如View的完整 propsvisible、styleSheet、style、geometry、id、mouseTracking、enabled、windowOpacity、windowTitle、windowState、cursor、minSize/maxSize/size、pos、on、ref、attributes、windowFlags可以在 ViewProps 接口文档 中查阅其他组件的 props 接口文档位于 website/docs/api/interfaces 目录下例如 buttonprops.md、checkboxprops.md。从 prop 到原生行为的映射同样可以在源码中找到证据setViewProps见 src/components/View/RNView.ts为id调用widget.setObjectName(id)、为visible调用widget.show()/hide()、为styleSheet调用widget.setStyleSheet(...)。也就是说View idfoo /在底层就是把 Qt 控件的 objectName 设为foo这与 Web 中id的作用方式神似但机制完全不同。除此之外正如教程强调的React NodeGui 应用可以访问整个 Node.js 模块生态。任何你在 Node.js 中能用的模块都可以直接在 React NodeGui 中使用——文件读写、网络请求、数据库驱动等能力开箱即用这让桌面应用的能力边界被极大扩展。一个稍完整的组合示例把Window、View、Text、Button组合起来就能得到一个带有样式和结构的真实界面。仓库自带的示例 src/demo.tsx 展示了这种组合方式import React from react; import { Text, Renderer, Window, Button, View } from .; const App () { return ( Window styleSheet{styleSheet} View idcontainer View idtextContainer TextHello/Text /View View Button textClick me/Button /View /View /Window ); }; const styleSheet #container { flex: 1; min-height: 100%; justify-content: center; } #textContainer { flex-direction: row; justify-content: space-around; align-items: center; } ; Renderer.render(App /);注意两点样式以 CSS 字符串形式通过styleSheetprop 传入且支持flex、justify-content、align-items等 flexbox 属性#container这样的选择器引用的正是组件上设置的id。下一步让界面更漂亮“我只想要比原生控件更定制、更漂亮的界面怎么办”——答案是样式系统。React NodeGui 的样式基于 Qt Style Sheets语法与 Web CSS 几乎一致同时通过styleprop 支持内联样式并通过 Facebook 的 Yoga 库提供 flexbox 布局支持。样式、选择器、伪状态如:hover、级联规则、qproperty-*高级用法等完整内容请继续阅读 样式指南Styling随后可以接着学习 布局指南Layout。至此你已经掌握了 React NodeGui 应用的基本骨架Node.js 工程结构、Renderer.render渲染入口、Window/View/Text等原生组件的使用与底层映射以及如何跑通官方 starter。接下来就是边改代码边观察原生窗口反馈开始构建属于你的桌面应用了。赞分享桌面应用跨平台【免费下载链接】react-nodeguiBuild performant, native and cross-platform desktop applications with native React powerful CSS like styling.项目地址https://gitcode.com/gh_mirrors/re/react-nodegui点击查看免费下载相关推荐NodeGui 入门教程用 Node.js Qt 原生组件构建跨平台桌面应用NodeGui 入门教程用 Node.js Qt 原生组件构建跨平台桌面应用 本教程面向具备 Web 开发经验、熟悉 JavaScript 或 TypeS桌面应用跨平台OpenCore Legacy Patcher终极指南让老Mac焕发新生的简单方法OpenCore Legacy Patcher终极指南让老Mac焕发新生的简单方法 想象一下你的老MacBook Pro还能运行最新的macOS系统吗这听操作系统固件驱动开发使用NodeGui构建高性能原生跨平台桌面应用使用NodeGui构建高性能原生跨平台桌面应用 在寻找一个既能提供高性能、又具备强大灵活性的解决方案来构建桌面应用程序吗NodeGui或许正是你需要的答案。这桌面应用跨平台上一篇3 分钟搞定 Beyond Compare 5 授权生成许可证激活完整指南下一篇如何把碧蓝航线的Live2D模型提取出来:AzurLaneLive2DExtract 完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

shellstyle.dll缺失不用慌:系统自带工具免费修复指南

shellstyle.dll缺失不用慌:系统自带工具免费修复指南

打开电脑准备导出图片,结果资源管理器突然弹出一个窗口:“由于找不到shellstyle.dll,无法继续执行代码。”关掉窗口再点一次,文件夹窗口只剩下白底黑字,左侧的导航栏整个消失了。这种事我遇到过不止一次,而…

2026/10/10 2:34:01 阅读更多 →
2026英语启蒙APP从夯到拉:6款亲测,0基础到小学段谁真能打?

2026英语启蒙APP从夯到拉:6款亲测,0基础到小学段谁真能打?

零基础启蒙到小学课内巩固,市面上英语APP种类繁多,动画、绘本、AI跟读、真人外教五花八门,不少家长盲目入手,最后发现内容不匹配、孩子难以坚持。本次实测6款主流英语启蒙APP,直面优缺点,帮家长分清实力派与…

2026/10/10 2:33:01 阅读更多 →
代理IP作为网络身份抽象层:全球化账号矩阵的分布式架构实践

代理IP作为网络身份抽象层:全球化账号矩阵的分布式架构实践

一、问题本质:平台风控的关联判定模型 要理解代理IP的价值,首先要明确平台风控系统如何判定账号关联。现代风控引擎(如RiskAI、Akamai Bot Manager)通常采用多维度加权决策树 图神经网络的混合架构,其核心判定维度包括…

2026/10/10 2:33:00 阅读更多 →

最新新闻

基于Django的Python数学学习系统开发与毕设实战指南

基于Django的Python数学学习系统开发与毕设实战指南

最近又帮两个学生把数学学习系统的毕设从"跑不起来"调到"答辩通过",这套基于Django的Python数学学习系统,前前后后算是摸熟了。趁着假期把经验整理出来,给准备做类似题目的朋友一个参照——不管你是学生本人,…

2026/10/10 3:21:15 阅读更多 →
Linux sort命令详解:从字典序到多键排序的文本处理实战

Linux sort命令详解:从字典序到多键排序的文本处理实战

做Linux运维或者开发的人,几乎每天都要跟文本打交道。日志要排序、配置文件要按字段提取、几十万行的数据文件要按某个列排一下,这时候第一个想到的命令应该就是 sort。很多人对 sort 的印象停留在“给文件按字母排个序”,实际上它远比想象中…

2026/10/10 3:21:15 阅读更多 →
iOS App技术支持网址搭建指南:审核要求、配置规范与最佳实践

iOS App技术支持网址搭建指南:审核要求、配置规范与最佳实践

1. 为什么iOS App需要一个正经的技术支持网址先说个挺常见的现象:很多独立开发者在提交App到App Store时,对"技术支持网址"这个字段基本是随手填的。有的人贴一个GitHub仓库地址,有的人放一个临时搭建的落地页,还有的人…

2026/10/10 3:21:15 阅读更多 →
35B 总参、3B 激活:KAT-Coder-V2.5-Dev 的 MOE 架构为什么是 Agentic Coding 的答案

35B 总参、3B 激活:KAT-Coder-V2.5-Dev 的 MOE 架构为什么是 Agentic Coding 的答案

35B 总参、3B 激活:KAT-Coder-V2.5-Dev 的 MOE 架构为什么是 Agentic Coding 的答案 【免费下载链接】KAT-Coder-V2.5-Dev 项目地址: https://ai.gitcode.com/hf_mirrors/Kwaipilot/KAT-Coder-V2.5-Dev Agentic Coding 时代的代码模型,任务早已不…

2026/10/10 3:21:15 阅读更多 →
.NET企业门户网站完整版:三层架构、部署实战与性能优化

.NET企业门户网站完整版:三层架构、部署实战与性能优化

简介:企业网站开发常面临功能完整性与可维护性的双重挑战,分层架构将数据访问、业务逻辑与页面表现分离,降低模块间耦合,便于独立调整与后续扩展。在.NET技术栈中,这种设计结合参数化查询、输出缓存、IIS部署配置等技术…

2026/10/10 3:21:15 阅读更多 →
SpringBoot3多数据源实战:从选型配置到避坑指南

SpringBoot3多数据源实战:从选型配置到避坑指南

做后端这些年,只要业务稍微复杂一点,“一个应用连一个库”的理想状态基本撑不住。用户数据放用户库、订单数据放订单库、日志又要独立一套,再加上读写分离和多租户隔离的需求,所有问题都指向同一个核心:一个SpringBoot…

2026/10/10 3:20:15 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →