UI 框架比较
作者:Jeff Tranter
日期:2024年9月25日
TwitterLinkedInFacebookReddit
https://www.ics.com/blog/comparison-embedded-ui-frameworks
更新! 我最初在2023年8月撰写了这篇博客文章,以帮助您为下一个项目选择合适的框架。在准备即将到来的嵌入式世界北美2024会议演讲时,我更新了原始文章。我添加了这些框架的最新信息,为您提供了一个涵盖当今可用的各种可行选项的便捷资源。(如果您参加在奥斯汀举行的展会,我邀请您在10月10日上午10:30参加我的演讲。)
大多数编程语言并不直接支持开发图形用户界面。通常使用外部软件来实现,这些软件可能被称为库、工具包或框架。许多这样的工具包存在,并通过以下因素区分:
- 它们直接支持的编程语言(例如C、C++、Python)。
- 它们支持的平台(例如移动、桌面和嵌入式平台,如Windows、Linux、macOS、iOS和Android)。
- 它们是否还提供用户界面之外的设施,如字符串处理、容器、文件输入/输出、网络等。
- 它们分发的许可证类型(例如开源/自由软件或商业/专有)。
选择使用哪个工具包可能会令人望而生畏。在ICS,我们长期以来一直依赖Qt,以其跨平台兼容性和一致的用户体验等优势而闻名。它是许多项目的绝佳选择,但在某些情况下,需要不同的解决方案。因此,我们还使用各种其他UI框架来实现具有图形用户界面的应用程序。每个框架都有其优缺点,特定应用程序的选择取决于许多因素。
我认为您会发现比较一些主要UI框架或工具包的关键功能会很有帮助,您可以使用这些信息来指导您的决策。为了将比较范围缩小到一个可管理的列表,我仅选择了符合以下标准的框架:
- 在多个平台上运行
- 支持本地开发
- 支持使用编译语言
- 积极维护
- 适合嵌入式开发
我确定了15个符合这些标准的框架,包括Qt、Flutter和Slint。下表按字母顺序列出了它们的特性。
框架比较
名称 | 平台 | 语言 | 许可证 | 优点 | 缺点 | 备注 |
---|---|---|---|---|---|---|
Crank Storyboard | 裸机、各种RTOS、VxWorks、Linux、macOS、Windows、Android。 | C, C++ | 商业 | GUI构建器。轻量级(适合MCU)。 | UI框架仅限。 | 主要用于MCU平台。 |
Dear ImGui | 支持DirectX、Metal、OpenGL或Vulkan的平台。 | C++ | MIT | 轻量级。利用GPU进行渲染。 | 小开发团队,文档不完整。 | 主要用例是游戏和其他具有3D管道的应用程序。 |
Embedded Wizard | 操作系统独立(包括裸机) | Chora | 商业和免费 | 适合微控制器。 | 专有Chora语言。 | WYSIWYG前端。 |
emWin | MCU(RTOS和裸机) | C, C++ | 商业 | 商业支持。AppWizard GUI构建器。 | 成本。不是完整的跨平台框架。 | 主要面向微控制器。 |
FLTK | X11、Windows、macOS。 | C++ | LGPL | 轻量级,小,学习曲线短。 | UI框架仅限。提供很少的控件。非本地外观和感觉。 | 主要用于桌面平台。 |
Flutter | Android、iOS、Linux、macOS、Windows、Web。 | Dart | BSD | 简单,学习曲线短。 | 仅直接支持Dart编程语言。 | 由Google开发。 |
GTK/gtkmm | X11、Wayland、Windows、macOS。 | C, C++ | LGPL | 稳定,广泛使用。 | 主要更新之间缺乏兼容性。 | GTK使用C,gtkmm是C++接口。 |
LVGL | 大多数MCU和MPU。 | C | MIT | 免费。支持MCU。 | UI工具包仅限。无GUI构建器。无商业支持。 | 常见选项用于MCU。 |
MicroEJ | 许多商业板/SOM/MCU和MPU。 | C, Java | C, Java | 成本。大而复杂。主要面向Java。 | 还提供虚拟化和云支持。 | |
Qt | Android、iOS、Linux、macOS、Windows等。 | C++, QML, Python | GPL, LGPL, 商业 | 完整的跨平台工具包,用户群大,文档齐全。 | 大而复杂。学习曲线长。 | 需要决定是使用控件还是QML。 |
SDL | Linux、Windows、macOS/iOS、Android。 | C | ZLIB | 免费。简单API。 | 不是完整的跨平台框架。无商业支持。 | 主要用于游戏和多媒体应用程序。 |
Slint | Windows、Linux、macOS和一些MCU。 | C++, Rust, JavaScript | GPL或商业 | 轻量级,可在MCU上运行。 | 相对较新,用户群小。MCU支持有限。 | QML类标记语言。 |
TouchGFX | STM32微控制器 | C, C++ | 免费,但专有 | 免费。由STMicroelectronics支持。 | 仅支持STM32平台。源代码不可用。 | 仅适用于STM32 MCU。 |
Unity | Windows、Linux、macOS、iOS、Android等。 | C# | 商业 | 2D和3D支持多个平台。文档良好。 | 闭源,仅商业。仅直接支持C#语言(Linux上使用Mono)。 | 主要面向游戏开发。 |
WxWidgets | Windows、macOS、Linux。 | C++ | LGPL类 | 稳定,免费。使用本地控件(如果可用)。 | 仅控件,最适合桌面应用程序。 | 以前称为WxWindows。 |
结论
选择合适的框架可以大大确保项目的成功。尽管我提供的一些信息是主观的,我的列表并不详尽,但我希望它能为您选择最适合您项目的工具包提供一些比较基础。