Comparison

本指南比较跨平台桌面 UI 框架及其有文档支持的生态能力。绿色表示可用,黄色表示仍需应用补足或验证,红色表示未提供。圆点表示功能覆盖,不代表性能。选型时还要核对版本、后端、平台与许可。

图例: Yes · Partial · No。纳入比较的生态扩展见下文。

CapabilityGPUI KitIcedeguiQt 6Slint
UI modelDeclarative passes + retained stateDeclarative view + retained stateImmediateRetained sceneReactive tree
UI authoringRustRustRustQML / C++ / Python.slint + Rust / C++ / JavaScript / Python
Visual toolingCode + component galleryCodeCodeQt Quick DesignerLive Preview / SlintPad
Component count75+35165224
Rendering stackGPUIwgpueframe: glow / wgpuQt RHI / scene graphFemtoVG / Skia / software
DocumentationComplete core + component docs; API + galleryBook + APIAPI + demosGuides + API + designerGuides + API + preview
Default UI styleTheme-driven componentsStyled widgetsegui visualsQt Quick stylesSlint widget styles
Desktop OS
Multiple windows
Shortcuts
Themes
Bundled theme presets38 (36 variants + Light/Dark)22 built-in variantsLight / DarkQt Quick stylesSlint widget styles
Code editor
CJK font supportSystem / bundled fontsFont-dependentCustom font requiredSystem fallbackFont-dependent
Text modelRopeCOSMIC TextTextBufferQTextDocumentTextEdit string
Syntax highlighting
Markdown
Markdown with inline HTML
HTML rendering
Rich text
Text selection
Advanced data table
Large-table virtualizationRows + columnsNoRows (egui_extras)Rows + columns (TableView)Rows
Resizable table columns
Virtual list
Charts
Docking
Animation
Accessibility
I18N
UI testing
Mobile
WebAssembly
LicenseApache-2.0MITMIT / Apache-2.0Commercial / LGPLv3 / GPLv3 by moduleGPLv3 / 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 与正文 HTMLTextView 在同一 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 构建。

CC BY 4.0 · GPUI Kit 有权授权的原创文档正文与图示可在注明署名后复制或改编。 许可条款。请署名 GPUI Kit,链接到 本页原文及 CC BY 4.0 许可,并注明是否修改。 代码示例与软件源码仍适用 Apache-2.0。既有 Apache 权利不受影响;第三方材料保留各自许可。