卡卷网
当前位置:卡卷网 / 每日看点 / 正文

有没有GUI框架开发难度小,资源消耗又不多,而且又跨平台?

作者:卡卷网发布时间:2024-12-04 16:06浏览数量:89次评论数量:0次

前言

为降低开发成本,在开发多平台的GUI软件时,应尽量避免重复工作,选用跨平台的GUI框架似乎是不错的选择。

虽然很多跨平台GUI框架都宣称同时支持桌面端和移动端,但实际受到显示大小、操作方式等影响,想要做到一套UI通用是不可能的,所以现代化的GUI框架会刻意分离UI和代码逻辑。另外,跨平台GUI支持的功能通常是各目标平台的交集,想使用某平台特有的功能则还是按照特定平台的方式进行处理。

跨平台GUI框架

此处仅列出开源且Star数较多,风评不错且成熟(生产可用)的GUI框架。

桌面端:指Windows(10,11)、Linux(X11,Wayland)、MacOS

移动端:指Android、IOS

WEB端:指Browser

名称技术栈支持平台许可证
QtC++桌面端、移动端LGPL
PyQtPython桌面端GPL
QMLQJS桌面端、移动端LGPL
GTKC桌面端LGPL
AvaloniaC#桌面端、移动端MIT
ElectronWeb桌面端、WEB端MIT
UniAppWeb移动端、WEB端Apache
FlutterDart桌面端、移动端BSD
SwingJava桌面端BCL
JavaFxJava桌面端BCL

下面从开发效率、运行效率、资源占用、学习难度、产出性价比等方面,分别对桌面端、移动端的跨平台GUI框架进行对比。

想要一套代码同时跨桌面端、移动端是不经济的,差异太大,反而要付出大量投入换取体验的折中。

打分制1到5分。运行效率以资源占用各平台原生开发作为对比,越接近原生分数越高;开发效率、学习难度以语言不同进行客观对比,开发效率越低分数越低,学习难度越高分数越低;性价比为学会后在行业里的复用性,越能复用分数越高。

桌面端

名称开发效率运行效率内存占用存储占用稳定性学习难度性价比
Qt2443534
PyQt3232534
QML4333321
GTK1444512
Avalonia4432242
Electron5211555

总结:

不担心商用风险,追求运行效率的,Qt是很好的选择。Qt的学习难度在C++里不算高的,并且中文资料非常多。然后C++和Qt国内主要在制造业,工作压力相对小一些,原生语言更注重积累,失业风险相对也小一些(Android和Web确实分走一些市场,但是低成本工控领域,目前Qt还是主流)。

如果选用PyQt的话,商用风险似乎比C++Qt更高,但是开发效率会高很多,但是又增加了Python的学习成本,好在Python的应用面也还不错,比如可以用Python分析数据、调用AI模型然后在GUI上展示。

QML在国内市场存在感不高,据说某些车企使用QML开发仪表盘和中控大屏,出处不可考。QML比较尴尬的地方在于和Qt Widgets绑定在一起,问题是开发者已经安装整套Qt了,何必还要学习QML。不过QML的技术思想还是不错的,视图和控制分离,声明组合式UI等等,属于主流思想,但是学QML的性价比真的不高。

GTK/GTK+其实算是Linux平台的"原生"开发方式了,只是有其他平台的适配,如果主要面向Linux桌面,并且选择有限的话(比如只能用C语言),推荐用GTK,经过GNOME等项目多年的验证。

Avalonia是.Net Core跨平台GUI框架,是WPF风格的XAML框架。在微软砍掉Xamarin、UWP、WinUI2,又在MAUI、UnoPlatform之间摇摆不定的时候,社区选择了”跨平台WPF“。Avalonia采用SkiaSharp自绘UI,UI描述语言AXAML属于XAML的超集,MVVM开发模式,总体开发规范和流程与WPF有80%的相似度,得益于C#和.Net Core,在开发效率和跨平台发布上表现较好,但是目前不太成熟,BUG还有很多,并且缺少设施(第三方控件、文档、生产案例)。如果用C#开发,需要跨桌面平台,且技术能力较强,推荐用这个(为什么不推荐MAUI和UnoPlatform呢,主要是微软最近几年的摇摆表现以及UnoPlatform已被微软招安)。

Electron则是使用Web技术开发桌面端软件,也就是”套壳“Chromium浏览器。不过浏览器内核经过多年的发展以及无数网页的验证,其可靠性是很高的。而Web是GUI开发的重点领域,生态非常成熟,唯一美中不足就是资源占用了。Electron本身是支持使用C/C++开发模块给内嵌的Web页面使用的(Node.js能力),但是人们之所以选择Electron就是为了开发效率和跨平台性,很少真的会认真优化(VS Code就是正面例子)。学习Electron的性价比在于,Web开发是共通的,就业面非常广(相对竞争也激烈),如果服务目标机器资源足够,不在乎资源占用和运行效率,则推荐使用Electron。(不推荐Tauri的原因是适用面不及Electron)

移动端

名称开发效率运行效率内存占用存储占用稳定性学习难度性价比
UniApp5211455
Flutter4332342

总结:

移动端跨平台没有推荐Qt、Avalonia、Xamarin这种框架,主要聚焦在桌面端的GUI框架是不太适应移动端的。之所以不推荐ReactNative,因为其自己重新造了一个类似React的Web开发方式,最后又编译到原生平台对应的控件,这种方式很难保证多平台一致性。

UniApp是国人发起的开源项目,使Vue在小程序、APP、Web上实现”跨平台“,加引号的原因是底层其实都是Web,但是国内各家小程序都有或多或少的差异,UniApp让小程序的开发人员节约了解各家小平台的时间和精力。如果打算开发移动端跨平台APP,我非常推荐UniApp。至于资源占用,移动端和桌面端不同,移动端是专注前台APP,只要合理适应后台机制,前台APP占用资源高也不会过于影响感受。UniApp的技术复用性同样在于Web。

Flutter是谷歌发起的跨平台GUI框架,虽然也有很长一段时间了,但似乎没有火热到主流程度。学习Flutter的性价比相对并不高,Dart语言比较冷门,不像安卓的Java学了可以转后端(学习Kotlin也要接触Jvm),IOS的Swift学了还能开发MacOS软件,Flutter的工作岗位也不多。话说回来,Flutter本身是很不错的,基本思想和发展路线都很对,但是没有采用主流开发语言是挺可惜的。如果对新技术感兴趣,并且技术能力较强,可以尝试Flutter。

END

免责声明:本文由卡卷网编辑并发布,但不代表本站的观点和立场,只提供分享给大家。

卡卷网

卡卷网 主页 联系他吧

请记住:卡卷网 Www.Kajuan.Net

欢迎 发表评论:

请填写验证码