GUI¶
基本概念¶
我对 GUI 应用的定义就是有 图形界面,并直接运行在移动操作系统/桌面操作系统中的应用。这个定义排除了 Web 应用(因为运行在浏览器里),但并没有排除游戏应用。不过通常还是会把游戏单独归为一类应用,尽管大多数技术是相通的
主要技术¶
图形 API¶
要实现 GUI,通常要使用操作系统提供的 图形 API。不过图形 API 属于较低层次的抽象,很多常用的 UI 组件都还得自己去实现。好在有 GUI 框架可以帮助我们减少代码量。
目前主流的图形 API 有 OpenGL/Vulkan/DirectX/Metal 这几种。不同的操作系统对于各种图形 API 支持程度不同,因此造成了应用跨平台的困难。同样好在有 GUI 框架可以自动处理这些问题,帮助应用更好的跨平台。
GUI 框架¶
GUI 框架是比图形 API 更高层次的抽象。有些操作系统已经提供了包含 GUI 框架的 SDK,不过这通常都只有特定语言的接口,比如 Android 是 Kotlin,iOS 是 Swift,Windows 是 C#。对于那些想要只用一套代码实现跨平台的应用,通常会使用社区里的解决方案。
Web 技术¶
也许你可以考虑使用 Web 技术来开发需要 GUI 的移动/桌面应用,有很多 框架 可以做到这一点。
以下是一些 Web 技术和图形 API 的简单对比,部分参考了 Electron 官网的对比,也许可以给你一些启发
适合 图形 API 的场景
- 性能极其敏感
- 需要深度操作系统集成
- 应用在资源受限的环境运行
- 目标平台明确且单一
适合 Web 技术 的场景
- 应用以内容展示和交互逻辑为主
- UI 复杂度高且需要频繁迭代
- 对安装包体积和内存占用不敏感
- 想利用 Web 强大的生态和跨平台能力
当然了,Web 技术一直在发展,很多传统上不适合 Web 的场景现在也可以选择 Web 了。因此上述的简单对比随时可能迎来反转。我个人认为投资 Web 绝对不会错,Web 统一前端指日可待。
框架¶
- Flutter 由 Google 开发的开源 UI 工具包,使用 Dart 语言,最适合用于移动应用,其它平台的生态还在发展中
- Qt 一个 C++ 的跨平台应用框架,提供了许多语言的接口绑定,一般用于桌面端应用
- MAUI 微软推出的跨平台应用框架,使用 C#,集成了 .NET 生态,可用于开发桌面/移动应用
- ImGUI C++ 的轻量级图形框架,通过配置不同的后端可以实现跨平台
- Tkinter Python 自带的 GUI 框架