参考 Philippe Groarke 的文章,仅针对个人开发者提供一些GUI选择建议。
[!Error]警告
- 以下均为个人主观评价
- 以Windows平台GUI框架为主,也列出包含Windows在内的跨平台方案
- 仅列出我熟悉或者了解的GUI框架,如有遗漏,希望大家补充
- 本来想发布成wiki贴,不过不知道怎么做,就这样吧
Qt
Qt 拥有您所需的一切,可助您快速高效地设计、开发、测试、部署和维护任何项目的软件。专注于打造最佳用户体验,而不是重复编写已有的代码。
- 主要开发语言:C++
- 平台:跨平台
- License:Commercial / GPL3 & LGPL3
- 风格:自绘 / 现代
- 优点:
- 久经沙场
- 强大的 IDE 和 UI Builder
- 很多 C++ 程序员推崇它
- 它确实有你所需的一切
- 缺点:
- 巨大而沉重的框架
- 使用旧范式
- 全家桶
- 慢
- 我不喜欢
- 简评:
如果你不介意发布时带着一堆动态链接库的话,Qt确实是万能的。
MFC (Microsoft Foundation Class)
MFC 是微软早期推出的 C++ 封装库,深深植根于 Win32 API 架构中,是许多老旧 Windows 桌面软件的历史遗留选择。
- 主要开发语言:C++
- 平台:仅 Windows
- License:专有(随 Visual Studio 提供)
- 风格:原生
- 优点:
- 久经沙场
- Visual Studio集成
- 资料丰富
- 缺点:
- 宏
- 过时的 C++ 编程习惯
- 简评:
今昔是何年?
WTL (Windows Template Library)
WTL 是基于 ATL 的轻量级 C++ 模版库,旨在为 Win32 界面开发提供比 MFC 更高效、更轻量级的封装。
- 主要开发语言:C++
- 平台:仅 Windows
- License:MS-PL (Microsoft Public License)
- 风格:原生
- 优点:
- Header only
- 基于 C++ 模板,运行效率和打包体积约等于win32api
- 缺点:
- C++ 模板
- 上手难度高
- 简评:
我宁愿选择win32api。
win32++
win32++ 是一个现代化的、仅包含头文件的 C++ 库,旨在对 Win32 API 进行直接且清晰的面向对象封装,是 MFC 的轻量级替代品。
- 主要开发语言:C++
- Platform:仅 Windows
- License:MIT
- 风格:原生
- 优点:
- Header only
- 运行效率和打包体积约等于win32api
- 缺点:
- 上手难度高
- 简评:
一个很不错的MFC/win32api/WTL替代品。
wxWidgets
wxWidgets 是一个让 C++ 开发者能够为多个平台创建原生界面外观的 GUI 库。
- 主要开发语言:C++
- 平台:跨平台
- License:wxWindows Library Licence (LGPL 衍生版本,允许商业闭源静态链接)
- 风格:原生
- 优点:
- 久经沙场
- 许可证极其友好
- 拥有 wxFormBuilder 等第三方可视化设计工具
- 在各平台使用原生外观
- 缺点:
- 复杂的API
- 简评:
很好很强大。
Sciter
Sciter 是一个轻量级、高性能的嵌入式 HTML/CSS/JS (TIScript/JSX) UI 引擎,专为桌面应用界面设计。
- 主要开发语言:C++ (引擎提供 C/C++ API)
- 平台:跨平台
- License:Commercial / 免费版有功能限制
- 风格:现代
- 优点:
- 久经沙场
- HTML、CSS、JS
- 内存占用和体积远小于 Electron和webview2等方案
- 易于使用,并提供许多高级UI功能
- DOM检查器
- 缺点:
- 不开源,但二进制文件可免费获取
- 文档不够完善
- 工具生态系统陈旧停滞
- 简评:
相比webview方案强过不少。
Dear ImGui
Dear ImGui 是一个即时模式的 C++ 实时图形界面库,专为游戏引擎、工具和调试面板设计。
- 主要开发语言:C++
- 平台:跨平台
- License:MIT
- 风格:自绘
- 优点:
- 久经沙场
- 无外部依赖,代码极其易读且容易扩展
- 缺点:
- 没有可视化UI设计器
- 简评:
即时模式的最佳选择。
GTK
GTK 是 Linux/GNOME 桌面环境的核心 UI 框架。
- 主要开发语言:C
- 平台:跨平台
- License:LGPL
- 风格:自绘
- 优点:
- 久经沙场
- Linux平台下的事实标准
- 缺点:
- 在 Windows 平台上的视觉体验较差
- API版本间不兼容变动较多
- 使用C模拟面向对象
- 简评:
你确定要用C来写GUI?
raygui
raygui 是专门为 raylib 游戏编程库设计的简单易用的立即模式(Immediate Mode)GUI 库。
- 主要开发语言:C (易于在 C++ 中使用)
- 平台:跨平台
- License:zlib/libpng
- 风格:自绘
- 优点:
- 简单
- 漂亮
- 很多小部件
- 易于上手
- 缺点:
- “raygui 旨在用于工具开发”
- 简评:
即时模式的又一选择。
FLTK (Fast Light Toolkit)
FLTK 是一个极其轻量级、跨平台的 C++ GUI 工具包,专注于小巧与快速。
- 主要开发语言:C++
- 平台:跨平台
- License:LGPL (带有静态链接例外条款)
- 风格:经典
- 优点:
- 轻量
- UI Builder
- 缺点:
- 丑
- 简评:
丑
IUP
IUP 是一个跨平台的 C 语言 GUI 工具包,通过抽象底层操作系统 API 来提供原生界面。
- 主要开发语言:C (可用于 C++)
- 平台:跨平台
- License:MIT
- 风格:原生
- 优点:
- 原生外观
- 轻量
- 和Lua工作得很好
- 缺点:
- SourceForge!?
- 折磨程序员
- 简评:
你确定要用C来写GUI?
WinForms (Windows Forms)
WinForms 是微软基于 Win32 API 封装的 C# 桌面 UI 框架,是 .NET 早期最流行的桌面开发工具。
- 主要开发语言:C#
- 平台:仅 Windows
- License:MIT (.NET Core 开源版本)
- 风格:原生
- 优点:
- C# 下的VB
- 拥有 Visual Studio 中最成熟、最流畅的 UI 拖拽设计器
- 缺点:
- 不支持现代化布局与 DPI 缩放适配能力较差
- 架构陈旧,不适应现代化 MVVM 设计模式
- 简评:
Old but gold, C#下的RAD最佳选择
WPF (Windows Presentation Foundation)
WPF 是微软推出的基于矢量渲染与 XAML 的现代 Windows 桌面应用程序框架。
- 主要开发语言:C#
- 平台:仅 Windows
- License:MIT (.NET Core 开源版本)
- 风格:现代
- 优点:
- MVVM
- 基于 XAML 与 DirectX 渲染,支持高度灵活的样式、模板和动画自定义
- 第三方现代 UI 控件库
- 缺点:
- XAML
- 简评:
介于WinForms和Avalonia之间,不上不下
Avalonia
Avalonia 是一个开源的、跨平台的 .NET UI 框架,支持 XAML 和现代化的 C# UI 开发,通常被视为跨平台版的 WPF。
- 主要开发语言:C#
- 平台:跨平台
- License:MIT
- 风格:现代
- 优点:
- 跨平台
- 从WPF迁移成本低
- 缺点:
- 生态比不上WPF
- 简评:
升级版WPF
WinUI 3
WinUI 3 是微软官方最新的 Native Windows UI 库,代表着 Windows 桌面开发的未来方向。
- 主要开发语言:C# / C++ (WinRT)
- 平台:仅 Windows
- License:MIT / 专有
- 风格:现代
- 优点:
- Fluent Design
- “WinUI 3 是用于构建新的Windows 桌面应用程序的推荐原生UI 框架。”
- 缺点:
- 半成品
- 不兼容旧版本 Windows 系统
- 简评:
未来可期!(现在就别碰了)
CEF/Electron
CEF 是一个简单的框架,用于将基于Chromium的浏览器嵌入到其他应用程序中。
- 主要开发语言:html/Js
- 平台:跨平台
- License:MIT
- 风格:现代
- 缺点:
- 巨大的
- 你真的想在UI中嵌入一个Chromium内核吗?
- 简评:
别碰!
WebView2
WebView2 控件允许在原生 Windows 应用程序中嵌入 Web 技术),使用 Microsoft Edge 作为底层渲染引擎。
- 主要开发语言:C++ / C#
- 平台:Windows
- License:专有
- 风格:现代
- 优点:
- HTML、CSS、JS
- 打包体积小
- 缺点:
- 运行时内存仍较大
- 依赖系统的WebView2运行时
- 简评:
比CEF/Electron方案也就打包体积小了点
Duilib
Duilib 是 Windows 平台下久负盛名的开源 C++ 界面库,使用 XML 描述界面布局,主要通过 DirectUI 思想和 GDI/GDI+ 绘图实现自定义换肤。
- 主要开发语言:C++
- 平台:仅 Windows
- License:MIT / BSD
- 风格:自绘
- 优点:
- 轻量高效
- 支持换肤
- 缺点:
- 过时的
- XML+贴图
- 简评:
你打算分一半coding的时间在Photoshop上吗?
WebUI
WebUI 是一个极其轻量级的 C/C++ 库,允许开发者使用任何网页前端技术作为客户端界面,同时后台与原生的 C/C++ 等代码进行高效交互。
- 主要开发语言:C / C++ /多语言绑定
- 平台:跨平台
- License:MIT
- 风格:现代
- 优点:
- 轻量
- 使用简单
- 缺点:
- 用户体验和传统应用程序差别较大
- 简评:
似乎有点非主流,不过管他呢,好用就行
Lazarus
Lazarus 是基于 Object Pascal 语言的经典 RAD(快速应用开发)GUI 解决方案。
- 主要开发语言:Object Pascal
- 平台:跨平台
- License:GPL & LGPL (Lazarus)
- 风格:原生
- 优点:
- RAD
- 缺点:
- Pascal
- 简评:
不是C#害了你,是这个乱世害了你鸭!
Flutter
Flutter 是由 Google 开发的开源 UI 工具包,允许使用单一代码库为移动设备、Web 和桌面端(Windows, macOS, Linux)构建跨平台应用。
- 主要开发语言:Dart
- 平台:跨平台
- License:BSD
- 风格:自绘 / 现代
- 优点:
- 真·跨平台,各平台视觉和动画效果高度一致
- 热重载
- 缺点:
- Dart
- });});},),);}
- 简评:
你需要一个带彩虹括号功能的IDE