Comparison
本指南比较跨平台桌面 UI 框架及其有文档支持的生态能力。绿色表示可用,黄色表示仍需应用补足或验证,红色表示未提供。圆点表示功能覆盖,不代表性能。选型时还要核对版本、后端、平台与许可。
图例: Yes · Partial · No。纳入比较的生态扩展见下文。
| Capability | GPUI Kit | Iced | egui | Qt 6 | Slint |
|---|---|---|---|---|---|
| UI model | Declarative passes + retained state | Declarative view + retained state | Immediate | Retained scene | Reactive tree |
| UI authoring | Rust | Rust | Rust | QML / C++ / Python | .slint + Rust / C++ / JavaScript / Python |
| Visual tooling | Code + component gallery | Code | Code | Qt Quick Designer | Live Preview / SlintPad |
| Component count | 75+ | 35 | 16 | 52 | 24 |
| Rendering stack | GPUI | wgpu | eframe: glow / wgpu | Qt RHI / scene graph | FemtoVG / Skia / software |
| Documentation | Complete core + component docs; API + gallery | Book + API | API + demos | Guides + API + designer | Guides + API + preview |
| Default UI style | Theme-driven components | Styled widgets | egui visuals | Qt Quick styles | Slint widget styles |
| Desktop OS | |||||
| Multiple windows | |||||
| Shortcuts | |||||
| Themes | |||||
| Bundled theme presets | 38 (36 variants + Light/Dark) | 22 built-in variants | Light / Dark | Qt Quick styles | Slint widget styles |
| Code editor | |||||
| CJK font support | System / bundled fonts | Font-dependent | Custom font required | System fallback | Font-dependent |
| Text model | Rope | COSMIC Text | TextBuffer | QTextDocument | TextEdit string |
| Syntax highlighting | |||||
| Markdown | |||||
| Markdown with inline HTML | |||||
| HTML rendering | |||||
| Rich text | |||||
| Text selection | |||||
| Advanced data table | |||||
| Large-table virtualization | Rows + columns | No | Rows (egui_extras) | Rows + columns (TableView) | Rows |
| Resizable table columns | |||||
| Virtual list | |||||
| Charts | |||||
| Docking | |||||
| Animation | |||||
| Accessibility | |||||
| I18N | |||||
| UI testing | |||||
| Mobile | |||||
| WebAssembly | |||||
| License | Apache-2.0 | MIT | MIT / Apache-2.0 | Commercial / LGPLv3 / GPLv3 by module | GPLv3 / commercial / royalty-free |
| Minimal Binary Size | ~12 MB | ~11 MB | ~5 MB | ~20 MB | ~21 MB |
| WebView |
Component count。 GPUI Kit 有 75+ 个已记录的 component 和 primitive。其余数字分别来自 Iced 0.14 的 widget 模块(35)、egui 0.36 的 widgets 模块(16,含 TextEdit)、Qt Quick Control 派生类型(52)以及 Slint 的标准组件目录(24)。各目录纳入的辅助类型和扩展范围不同,这些数字表示目录规模,不能直接用于排名。
Documentation。 GPUI Kit 的核心指南、组件文档、API reference和交互式 gallery覆盖当前公开能力;实验性功能也说明了现阶段的限制。
Binary size 数据口径。 前四个值保留原 main 分支的 Hello World Release 估计;原表为 Qt 数据附上了这篇体积研究。Slint 的 ~21 MB 来自 Slint 1.18.1 Hello World 在 Linux x86-64 上执行 cargo build --release,strip 后为 20,768,216 字节(19.81 MiB)。各值的构建条件不同,是近似参考值,并非已验证的最小体积或同口径跑分。
帧率。 本表不对帧率排名:没有相同负载、硬件和呈现测量来支持跨框架 FPS 数字。120 Hz 目标意味着相关管线每帧约有 8.3 ms 预算;它不表示空闲窗口持续重绘,也不保证任何复杂界面都能持续每秒显示 120 帧。GPUI 的 draw 和 present 指标见 FPS Monitor。
#选型速览
上表记录能力覆盖;下表说明这些能力在选型时的利弊。这些判断基于所引用的 API 与文档,不是性能跑分。
| 需求 | GPUI Kit 的优势 | GPUI Kit 的成本或限制 | 对比对象 |
|---|---|---|---|
| 代码编辑器与高密度数据界面 | Editor、DataTable、VirtualList 和 Dock 属于同一 Rust 组件体系。 | 应用仍负责数据排序,也需要在目标平台验证 Accessibility。 | Qt 的 Model/View 和 QTextDocument 提供覆盖更广的桌面体系。 |
| 可选择的 Markdown 与正文 HTML | TextView 在同一 UI 树中支持两者。 | HTML 支持不包括通用 CSS 布局和脚本。 | Qt QTextDocument 支持更广的富文本子集;需要浏览器行为时应评估 WebView。 |
| 同时面向桌面、移动端与 Web | 可以用同一组件 API 探索 WebAssembly 展示和实验性的 iOS 工作。 | Mobile 与 Web 集成仍需针对目标应用验证。 | Qt 的平台列表,以及 Slint 的 mobile 和 web 指南覆盖更广目标。 |
| 可视化 UI 编辑 | Rust 代码和组件画廊让界面与应用逻辑保持接近。 | GPUI Kit 没有内置可视化设计器。 | Qt Quick Designer 提供可视化编辑;Slint 提供 Live Preview。 |
AI 可以直接修改 GPUI Kit 的 Rust UI 代码,无需独立的 Visual UI editor。
#如何理解这些判断
渲染模式。 GPUI Kit 在 render 过程中按当前输入构造元素描述,并保留 Entity、带 ID 的元素状态及可选的 View Cache。表格中的说法同时描述这些层次,并不意味着每次屏幕刷新都重建整个 UI;渲染模式详解将它们分开说明。Iced 将自身描述为 state/message/update/view 架构。egui 明确使用 immediate mode。Qt Quick 在帧间保留场景图,Slint 使用响应式属性绑定。
桌面基础能力。 五种方案都能构建多窗口桌面应用、处理键盘快捷键并定制主题;实现方式不同。例如 Iced 有窗口打开 API,eframe 使用原生 viewport,Slint 提供按键绑定和标准组件样式。输入法、剪贴板和拖放还应按目标平台实际测试。
Rendering stack、theme 与 CJK。 Rendering stack 行记录框架或可选图形后端,不是 GPU 跑分:egui 的 eframe 可选 glow 或 wgpu,Qt Quick 使用 Qt RHI 上的 scene graph,Slint 列出 FemtoVG、Skia 与 software renderer。GPUI Kit 的 38 种 theme 是本仓库 themes/*.json 中 36 个变体加上 Default Light/Dark;Iced 0.14 有 22 个预置变体及 Custom。原表把 egui 的 CJK 写成“差”过于笼统:egui 需要额外安装支持亚洲文字的 font,Qt 则有按文字体系查找 fallback font 的机制。最终文字覆盖仍取决于打包或系统安装的字体。
Table column resizing。 GPUI Kit、egui_extras、Qt 和 Slint 都支持;Iced 没有内置拖动列宽。
Large-table virtualization。 这一行保留了原表对可见行与可见列的区分:GPUI Kit DataTable 的可见范围同时记录行和列;egui_extras TableBody::rows只渲染可见行;Qt Quick TableView会复用移出视口的行列 delegate。Iced 的表格 API没有承诺内置虚拟化。Slint StandardTableView 的实现将行 repeater 放在 ListView 中,因此只实例化可见行;列和单元格 repeater 没有采用相同的视口虚拟化。
编辑器与高亮。 GPUI Kit 的 Editor 用 Rope 保存文本,并提供折叠、诊断、补全和悬浮提示等代码编辑能力。启用对应语法的 grammar feature 后,语法高亮使用 Tree-sitter;大型文本的解析可以放到后台,编辑时可复用上次的解析树。文本模型与高亮引擎是两个不同维度:使用 Rope 不等于自动获得语法高亮。Iced 的 TextEditor 有需要启用 feature 的高亮;egui 的 TextEdit 可传入自定义 layouter,也可用 egui_extras 高亮;Qt 提供 QSyntaxHighlighter。这一行比较 API 是否可用,不代表同样文档规模下的性能对比。
文本模型。 表格列出每种编辑器公开的文本存储或编辑抽象:GPUI Kit 将文本保存在 Rope 中;Iced 使用 COSMIC Text,egui 接收 TextBuffer,Qt 暴露 QTextDocument。这些是 API 形态,不是速度排名。
格式化文本。 GPUI Kit 的 TextView 能显示并选择 Markdown 和 HTML 文本;Markdown 解析器也会把内嵌 HTML 节点交给 HTML 解析器。Iced 的 Markdown 组件没有提供 HTML item;egui 需借助扩展库显示 Markdown;Qt 的 QTextEdit仅支持部分内嵌 HTML。此行的“不支持”只表示文档化的内置 Markdown 路径不处理内嵌 HTML,应用仍可另接渲染器。
HTML 渲染。 TextView::html 能展示博客或新闻正文常见的标题、段落、链接、图片、列表与表格。它不实现通用 CSS 布局,也不运行脚本,因此标为部分支持;这不是 WebView。Qt 的 QTextDocument支持更广的 HTML 4 与 CSS 子集,同样不具备浏览器行为。此行比较的是有文档支持的原生 HTML 正文渲染,不把另接 WebView 算入;在比较范围内,Iced、egui 和 Slint 没有同类原生文档渲染器。
表格与列表。 “高级数据表格”指面向大数据集,具备虚拟化渲染、排序、选择和列管理的组件。GPUI Kit 的 DataTable 提供这些交互,底层数据排序由 delegate 实现。Qt 的 QTableView及 Model/View 体系也覆盖这类需求。egui_extras TableBuilder能虚拟化行并调整列宽,但更多数据行为由应用实现。Slint 的 StandardTableView有排序回调和选择能力;Iced 的表格提供较基础的起点。单独看列表,GPUI Kit VirtualList、egui ScrollArea::show_rows、Qt ListView和 Slint ListView按需创建可见项;Iced 提供滚动与可见性原语,虚拟化由应用实现。
高密度桌面界面。 GPUI Kit 内置 VirtualList、DataTable、图表、TextView和 Dock。Iced 有富文本、表格、需启用 feature 的 Markdown 组件、Canvas和窗格网格;虚拟化表格或图表还需要应用实现。egui 生态提供用于 Markdown 的第三方 egui_commonmark、用于停靠布局的 egui_dock 以及 egui_extras 表格与 egui_plot。Qt 提供 Model/View 表格、Dock Widget、QTextDocument和单独许可的 Qt Graphs 模块。Slint 有 StandardTableView及只实例化可见项目的 ListView;其 Path 可用于自绘,但不是现成图表。
产品就绪程度。 GPUI Kit 的无障碍、测试、国际化和动画指南说明了当前实现与限制。其组件包含翻译,但应用文案与语言策略仍由应用负责。Iced 的无障碍集成仍列为未完成工作,同时提供测试工具。egui 文档介绍 AccessKit 与 egui_kittest。Qt 有较完整的无障碍、国际化和Qt Test设施。Slint 提供无障碍属性和翻译机制;其测试后端仍标为初步 API,且属于内部 crate。无障碍一栏的“Yes”仍需要在每个目标平台使用辅助技术验证。
平台覆盖。 GPUI Kit 有实验性 iOS 集成和可运行的 WebAssembly 展示示例;本仓库尚未将后者验证为完整应用的成熟分发路径。Iced 有 Web 示例,原生移动端支持仍在讨论。eframe可在 Web 与原生平台运行 egui,但 Android/iOS 集成仍应针对具体应用验证。Qt 文档列出支持平台和 WebAssembly 限制。Slint 有移动端与 Web文档;其 Web 输出使用 canvas,不支持浏览器屏幕阅读器。不能默认把这些基于 canvas 的 Wasm 界面当成 HTML 应用。
WebView。 GPUI Kit 有实验性的 Wry 集成。原生 WebView 会盖住同一区域的 GPUI 元素;需要叠层时,宜放在独立窗口或弹出层。目前文档只列 macOS 和 Windows,Linux 示例仍未完成。Qt 提供官方 WebEngine与 WebView 模块,但 Qt WebView 与 QML 元素的重叠也有限制。此行统计适用于所比较版本、由框架维护的集成:Iced 虽有第三方 iced_webview crate,但它依赖 Iced 0.13,本表未验证其适配当前 Iced 0.14;egui 没有同类受维护的原生集成,Slint 的 WebView 需求仍未关闭。红点不排除应用自行桥接。
许可与比较范围。 GPUI Kit 采用 Apache-2.0;Iced 为 MIT;egui 为 MIT 或 Apache-2.0;Qt 按模块采用商业、LGPLv3 或 GPLv3 条款,其中 Qt Graphs 为 GPLv3 或商业许可;Slint 采用 GPLv3 与商业或免版税条款。SwiftUI、WinUI 等单平台原生栈的平台覆盖范围不同。Electron 与 Tauri 使用 WebView/JavaScript UI 架构,应单独评估,不在此原生 UI 矩阵中打分。包体积和帧率受构建 feature、渲染器、字体、打包方式及负载影响;应测量准备发布的产品 release 构建。