路线与选型
按目标选框架:桌面、Web、底层渲染、嵌入式与特殊形态 GUI
先看结论
- 桌面应用 → 跨平台GUI - Qt
- 浏览器界面或网站前端 → Web GUI - React
- 用 Web 技术写界面的 Windows 桌面应用 → C++ + WebView2(见后文)
- 自己接管渲染链路的跨平台程序 → 跨平台基础设施 - SDL + RmlUi
- 资源受限设备上的图形界面 → 嵌入式GUI - LVGL
一张图选型
不同路线的适用边界
Qt · React · WebView2 · SDL + RmlUi · LVGL
Qt:成熟的桌面工程体系
- 优点:工程体系成熟,控件、Designer、QML、跨平台支持都比较完整。
- 缺点:体系较大,学到后面很容易从 GUI 一路扩展到网络、数据库、OpenGL、音视频等整套应用开发。
- 适合:业务桌面软件、上位机、需要完整工程能力的客户端应用。
React:浏览器分发的 Web 前端
- 定位:更适合 Web 前端和文档站点类项目。
- 代价:生态和脚手架都很成熟,但也更依赖前端工程体系。
- 适合:需要浏览器分发、多人协作和组件化页面开发的场景。
C++ + WebView2:原生宿主套 Web 界面
- 分工:C++ 管窗口与系统能力,界面用 Web 技术写,跑在系统自带的 WebView2 里。
- 加载:前端产物嵌进 exe,经
WebResourceRequested挂到虚拟 HTTPS 源;开发期改连 Vite 开发服务器。 - 边界:比 Electron 轻、复用前端生态;依赖 WebView2 Runtime,跨平台要另配 WebKitGTK 等后端。
SDL:只给窗口、输入与渲染循环
- 定位:底层基础设施,管窗口、输入、渲染循环与音频,屏蔽各平台差异。
- 短板:没有控件、布局与文字排版,单靠它写不出 UI,得再叠一层界面库。
- 常见于:播放器、图形实验,或给其他库打底:
SDL + RmlUi:用 HTML/CSS 思路写原生界面
- 分工:SDL 只管窗口与事件;RmlUi 负责界面,
data-model绑定数据,自定义元素可接管绘制。 - 衔接:Platform 后端把 SDL 事件转给
Rml::Context,Renderer 后端用 GL3 或 DX11 画进 SDL 窗口。 - 可换:后端不绑死 SDL,官方还有 Win32 / X11 / Wayland / GLFW / SFML 与 GL2 / Vulkan / DX12 / SDL_GPU;也可自己实现
Rml::RenderInterface嵌进游戏引擎。
LVGL:资源受限设备的专用界面
- 环境:MCU、精简 Linux、嵌入式设备等资源受限环境。
- 优点:轻量、可移植,适合在 PC 侧先做模拟调试,再迁到目标板。
- 边界:更适合确定硬件边界后的专用界面,不适合作为通用桌面框架。

图:LVGL 官方 widgets 示例截图,480 × 272(lvgl/lvgl,MIT)
轻量级和特殊形态 GUI
终端与引擎内嵌面板
两个特殊形态库
| 库 | 形态 | 适合 | 不适合 |
|---|---|---|---|
| FTXUI | 终端 UI:Screen · Dom · Component | 命令行工具、开发辅助界面 | 复杂图形应用 |
| RmlUi | HTML/CSS 风格,不依赖浏览器 | 游戏/引擎内嵌面板,或与 SDL 搭桌面界面 | 依赖完整 Web 标准的页面(RCSS 只是 CSS 子集) |
个人经验提炼
- GUI 开发本身只是入口,后面很快会牵连到构建、资源管理、网络、数据库和调试。
- 真正有复用价值的内容,不是“会不会画按钮”,而是框架边界、调试路径和工程组织方式。
- 同一类问题优先沉淀到已有主题页,不再单独新增很多两三屏就说完的短文。
1 / 14← → 翻页 · F 全屏 · B 黑屏 · 页码加回车跳页
