深圳幻海软件技术有限公司 欢迎您!

QT、WPF、PyQt、Electron 桌面应用解决方案

2023-02-28

C++的QT背景Qt是一个1991年由QtCompany开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(MetaObjectCompiler,moc))以及一些宏

C++的 QT

背景

Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。2008年,Qt Company科技被诺基亚公司收购,Qt也因此成为诺基亚旗下的编程语言工具。2012年,Qt被Digia收购。2014年4月,跨平台集成开发环境Qt Creator 3.1.0正式发布,实现了对于iOS的完全支持,新增WinRT、Beautifier等插件,废弃了无Python接口的GDB调试支持,集成了基于Clang的C/C++代码模块,并对Android支持做出了调整,至此实现了全面支持iOS、Android、WP,它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。基本上,Qt 同X Window上的 Motif,Openwin,GTK 等图形界 面库和 Windows 平台上的MFC,OWL,VCL,ATL 是同类型的东西。

QQaZ" id="h6e90be6-niPAQQaZ">优势

  • 非常多的跨平台Desktop Application是基于QT编写的,它不仅能够保证跨平台,而且能够将运行效率最大化。
  • Qt适合一些性能要求高的桌面应用,如果你只打算做桌面端的话。或者是一些特殊的场景,比如你要做个类似绘声绘影的视频编辑器,做个类似word之类的桌面应用,那你用electron要么是没法做,要不就是体验非常烂。实际应用上,比如wps,yy语音,VirtualBox,以及部分adobe的桌面工具都是Qt做的。

C# 的WPF和WinForm

Winform

大多数人开发CS程序都是基于Winform去做的,它的有点在于简单、高效,但是它的缺点在于,如果你想深入的美化UI,需要耗费很大的力气,对于目前主流的CSS样式表来讲,美化Winform的界面以及自定义控件是需要耗费更多的时间的。

写的程序如果需要改界面牵扯很大。代码的编辑可能会导致更多的错漏出现而不自知。大工程改界面更甚。

wpf

优势

  • wpf需要学习xaml,有全新的ui描述语言,特别是可以通过模板的嵌套实现复杂的元素,通过style实现类似css的功能,通过比winform完善的多的数据绑定机制实现业务逻辑可以专心对数据而不是界面进行开发。学习wpf可以更方便过度到其他xaml相关技术,这是微软目前广泛使用的技术,比如接下来的windows通用应用。
  • 采用mvvm(model、view、viewmodel)来写,任你界面改翻天,后台代码不受任何影响。
  • WPF不能运行在其他操作系统,并且在XAML中编写样式表,通用性还是不如HTML强,从学习应用的范围来讲,还是HTML更好一些。
  • 与分辨率无关
  • WPF是基于矢量绘图的,因此它产生的图形界面能够支持各种分辨率的显示设备,而不会像WinForm等在高分辨率的现实设备上产生锯齿。
  • 硬件加速技术
  • WPF是基于Direct3D创建。在WPF应用程序中无论是2D还是3D的图形或者文字内容都会被转换为3D三角形、材质和其他Direct3D对象,并由硬件负责渲染,因此它能够更好的利用系统的图像处理单元GPU,从硬件加速中获得好处。
  • 绚丽的展示效果,WPF(Windows Presentation Fundation)顾名思义其强大的图形化API为程序提供了超乎想象的图形效果;XAML的引入,使得美工和程序可以实现分离,使得定制化主题/外观/行为更加方便也易于维护;
  • 强大的 “数据绑定”功能,使得MVVM得以实现,成为“属性驱动”,而非WinForm的“事件驱动”;属性的更改可以自动获得,甚至动过转换器触发各种展示/行为的变更;
  • Style可以让你应用不同的样式到不同的控件,而且易于管理

Python的PyQt

PyQt5是python的一个GUI框架,存在界面设计器QtDesigner工具,可便捷的采用拖拽方式进行页面构造。然后通过工具将UI文件生成对应的python代码。

优势:

  • 跨平台效果好,完美支持Mac、Windows、UNIX等多种系统;
  • 学习简单,面向对象的特性体现的比其他框架明显,在命名,继承,类的组织等方面保持了优秀的一致性,代码写起来比较优雅。
  • 功能强大,基本能实现QT能实现的所有功能
  • 文档丰富,PyQt使用者众多,同时可直接参考QT文档,对后期开发更加方便
  • 拥有QT Designer和QSS支持,界面效果更好
  • pyqt5是双重许可,开发者可以在GPL和商业许可之间进行选择
  • 学完PyQt5之后只要再学习C++就能完成Qt开发转行,一举两得
  • 配合Django实现CS和BS全技能开发
  • 长期维护是很多程序员选择框架的重要标准,毕竟一个项目的运行周期可能很长,如果框架不能及时支持,后期带来的麻烦会很多
  • 开源免费,稳定性和安全性都好
  • 使用信号和槽机制,界面设计和业务代码分离开发

JavaScript的 electron

特点:

  • Electron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库。Electron通过将Chromium和Node.js合并到同一个运行时环境中,并将其打包为Mac,Windows和Linux系统下的应用来实现这一目的。
  • Electron适合一些偏业务的应用,对性能没有很多要求,主要是业务逻辑和UI展示,比较轻量级的应用。因为Electron可以一份代码同时得到网页版和桌面版,所以如果你的应用还需要网页版,那么Electron可以极大地节省你的开发和维护成本。比如钉钉,slack,现在越来越多的偏业务型(并不是需要高性能的专业工具)应用开始使用Electron来做了。优点
  • 开源的核心扩展比较容易,目前是基于 node 6.x,加之现在 gyp 已经非常人性化了,使得c++ 和 js 搞基非常容易。
  • 界面定制性强,原则上只要是Web能做的他都能做。
  • 是目前最廉价的跨平台技术方案,HTML+JS 有大量的前端技术人员储备,而且有海量的现存web UI 库。大多都很靠谱。
  • 相对其他跨平台方案(如 QT GTK+ 等),更稳定,bug少, 毕竟只要浏览器外壳跑起来了,里面的问题不会太多 ,当然我也遇到过一些暗坑。方便热更新。下载覆盖完事。当然这是所有脚本共有的优点。

缺点:

1.卡,启动慢,这可能是webkit的锅。毕竟一个浏览器要支持的功能确实有点多。

2.除了主进程 你可能还需要启动一些辅助进程来完成工作。而每当你新开一个进程,起步价就是一个nodejs的内存开销!

3.丢帧,这个最严重,可我已习惯了native 的丝滑. mac下感觉还可以 win下有点够呛。

4.打出来的包太大。(很显然,即便是一个空包,也至少包含了一个浏览器的体积)​