行云小站
Say hello to you!
图片来自 @Unsplash
w568w 创建时间被隐藏
通往原生 GUI 之路
本文已被读

Lazarus

  • 编程语言:Object Pascal
  • 支持平台:Windows、Linux、macOS、iOS、FreeBSD、Android、Windows CE、Embedded

💪优点

  • 有一个所见即所得的界面设计器
  • 完整的 IDE 支持,在 Lazarus IDE 中即可完成所有开发工作
  • 编译速度快,生成的可执行文件体积小,不再依赖其他框架

🤔缺点

  • Object Pascal 是一种较为陈旧且冗长的语言,不太适合新手。可以说,在 2024 年,提到 Object Pascal 唯一的用途就是 Delphi 和 Lazarus 了,学习该语言的其他用途几乎为零。自然地,你也不可能找到较好的第三方库和模块支持,这就使得对碎片化严重的平台(如 Linux 和 Android)的支持意义变得很小
  • Lazarus IDE 功能较为简陋,但整个开发流程又被完全绑定在 Lazarus IDE 上,使得开发效率较低。对于习惯 Visual Studio、Xcode 等现代 IDE 的开发者来说,这绝对是一场灾难:例如,所有设置和菜单项的位置都摆放随意,作为一个接近十年开发经验的开发者,我竟然在 IDE 中花了 10 分钟才找到如何设置编译选项

ImGui

  • 编程语言:C++(以及几乎所有常见语言的绑定,例如 C#、Rust、Go…)
  • 支持平台:官方维护的后端基本已经支持了所有常见桌面、移动、嵌入式平台(DirectX9/11/12、OpenGL、Metal、SDL、Vulkan、WebGPU…)

💪优点

  • 足够轻量(本身只有一个头文件和一个 cpp 文件),可以很方便地集成到任何项目中
  • 兼容性绝对是杀手级别,你可以使用几乎任何语言为任何平台开发基于 ImGui 的应用
  • 扩展性好,容易迁移到新的设备或平台上
  • 流行度高,已经被广泛应用于游戏开发、工具开发等领域
  • 非常精简,编译体积甚至比 Lazarus 生成的可执行文件还要小

🤔缺点

  • 轻量有的时候意味着简陋。例如,至今没有好办法在 ImGui 中实现一个多行文本框,这在很多应用场景下是必须的(尽管当我们谈到文字处理时,事情总是变得复杂1
  • 立即模式 GUI 有时候并不是一个好的选择:每帧重新绘制整个界面对复杂应用来说肯定是一个性能瓶颈,而且任何动画和复杂的控件交互都需要自己从头实现
  • 完全利用图形 API 绘制界面,意味着会有更高的 GPU 占用,并且不利用原生控件也使得其控件风格和系统原生控件有较大差异

wxWidgets

  • 编程语言:C++、Python(还有其他语言的绑定,但要么不完善,要么已经停止维护)
  • 支持平台:Windows、Linux、macOS

💪优点

  • 直接使用系统原生控件进行绘制,风格契合度和性能都很好
  • 控件数量相对比较丰富
  • 编译体积也相对比较轻量

🤔缺点

  • 官方教程年久失修,很多函数没有文档注释,很多功能的使用方法也需要查阅第三方教程
  • 偏向 MFC 时代的 API 设计风格(尽管他们实际上有一套新的不太成熟的 API),对于新手来说学习曲线较陡
  • 编写布局的方法较为繁琐。其 RAD 工具也不太好用,让本就缓慢的 C++ 编译速度变得更加难以忍受

FLTK

  • 编程语言:C++、Rust
  • 支持平台:Windows、Linux、macOS

💪优点

🤔缺点

  • 控件数量较少,功能较为简陋
  • 控件的风格和系统原生控件有较大差异,并且非常原始,看起来像来自 Windows 95 时代(尽管 Rust 绑定的维护者编写了一些新的主题,努力改善这一点)
  • 中文支持不佳,在 Windows 下的字体渲染效果差

Fyne

  • 编程语言:Go
  • 支持平台:Windows、Linux、macOS、iOS、FreeBSD、Android

💪优点

  • 使用 Go 也算是一个优点?

🤔缺点

  • 编译体积较大,即使空项目也有 10~20MB 左右
  • 使用自己的控件风格,与系统原生控件有一定差异(但相对比较现代)
  • 社区资源较少,学习资料不多,组件数量也不多(实际上维护也不是很活跃)

Slint

SWT

GTK4

易语言

  • 编程语言:易语言
  • 支持平台:Windows、Linux(仅控制台,不支持 GUI)

💪优点

  • 语法简单,基本是中文版的 Visual Basic,适合初学者
  • 有一个所见即所得的界面设计器
  • 有大量的第三方库和模块支持,诸多优秀的中文教程和社区
  • 编译体积和 VB 一样小,比 Lazarus 生成的可执行文件还要小

🤔缺点

  • 很难写出紧凑高效的代码。语言本身的局限性很大,很多功能都需要调用系统 API 才能实现
  • 难以用 Git 等现代版本控制工具管理代码
  • 仅支持 Windows 平台
  • 上一版本以来已停止更新 1 年多,未来前景不明朗

aardio

  • 编程语言:Lua(使用 aardio 标准库,有一定魔改)
  • 支持平台:Windows

💪优点

  • 完善的中文文档、教程和社区,自称已经有 20 年历史,目前仍在活跃更新
  • 有一个所见即所得的界面设计器
  • 语法简单,适合初学者,也支持调用外部语言
  • 编译体积和易语言类似,专注于 Windows 平台

🤔缺点

  • 仅支持 Windows 平台
  • 只能使用 aardio IDE 进行开发,功能较为简陋

参考

w568w
梦想改变自己的疯子。