客户端GUI程序开发漫谈

这篇文章包含了这个领域的不少开源项目的介绍,还有我多年来的心血和汗水php

  去年夏天的时候,我 用QT作了一个小工具

后来还用QT作了流程设计器html

我把程序分享给飞扬青云以后,他甚至搞出来一套QT的皮肤前端

说实在的,QT确实挺强大的,vue

若是你有一个项目,须要跨平台GUI开发,你又有一个C++团队的话,node

那么作技术选型的时候,能够负责任的说,QT是不二之选python

 

这时可能有人会提到GTK+linux

我想说的是GTK+对windows平台的支撑力度实在是少的可怜git

linux的版本已经到了3.16了,windows的版本才到3.0.6,整整差10个版本(我这里说的是GTK3)github

并且大部分常见的控件在windows上都没有web

来看看我在一个开源项目上踩的坑吧。

 

固然还有人可能提到wxWidgets,这玩意儿我没有深刻研究过

只知道它是在原生图形API上再作的包装,想一想windows API搞出来的窗口有多古板,仍是算了。

相似的还有iup,跟wxWidgets的原理是同样的。

 

还有人直接用游戏库作GUI程序的,好比nimxnanovg

nimx是基于SDL2图形引擎搞出来的GUI框架

我在nimx上踩到两个坑,其中一个提交pull request给做者,做者也认了

第二个坑就直接把我坑死了。

nanovg是基于OpenGL图形引擎搞出来的GUI框架。

这个项目仍是in progress状态。

总之,这两个项目都不能用于生产。

 

说到这里不得不说轮子兄搞的gacui

(我本想说,国内轮子兄...,但貌似他也已经肉身FQ了,再提国内也不对了)

这个项目我了解的很少,只在14年春天的时候,搭过环境,写过hello world

前段时间学习nim语言,兴致勃勃跑到github问做者要dll,打算用nim作个包装

后来才知道,做者是不会提供了,好遗憾。

gacui的原理我不太清楚,只知道有GPU加速。

 

固然还有基于Direcut UI发展而来的duilib

这个库也是国内一位朋友搞出来的

听说不少大厂的客户端都在用这个开源库

duilib应该是受这个项目的启发才建成的

国内很著名的一个收费UI库UI Power也是基于这个思路搞出来的

 

在国内开发GUI应用程序,更多的仍是给windows平台下的用户用

若是你想最大自由度的定制你的界面,又不想让你的程序的发型版看起来太大

那么duilib是个不错的选择,但duilib文档太少(做者本身也这么说),你要作足这方面的准备

好在是开源的,你C++够牛的话,也不用担忧

 

固然若是你但愿有完善的文档来给你提供帮助的话,

那么你能够选择Qt,毕竟是国外大厂商,源码、IDE、文档、社区都很齐全

这里不得不提一下国内的qtcn社区,挺不错的,里面有很多这个领域的专家,并且都挺热情的

 

可是Qt的依赖库库实在太多,你开发好的程序怎么着也得有个十几兆,才能分发给别人。

并且我相信你确定会用到process explorer或者dependencywalker之类的工具来查找你的程序到底依赖了哪些dll

好吧,若是你足够厉害、有一台性能超赞的电脑、有一两个小时的时间,你能够尝试静态编译QT

 

若是你开发的GUI程序只给windows平台下的用户用

那么最最基本的三个选择:windows api、MFC、WTL

用windows api作GUI程序,比较辛苦,由于它就是一系列的API,全部的事情都得你本身来作

MFC是一套很是庞大的类库,他里面包含了一系列的C++的机制,用起来很是繁琐

WTL比MFC简单,比windows api易用,但资料不多

你若是要走WTL这条路,那么你必定会看《深刻解析ATL》这本书(友情提醒,这本书最新版翻译的实在太烂了)

 

好,再来讲用混合开发技术作GUI程序

这种技术方式的主要原理就是:

你写代码包住浏览器内核,

界面代码用HTML/CSS/JS完成(这是最大的优点,你能够用全部与之相关的库)

全部与界面渲染相关的事情交给浏览器内核完成,

全部与系统相关的事情你本身完成

 

这项技术在移动端用的挺好的,

好比说国外的:phonegapcordova 、ionic

还有国内的:muiappcan

ionic和phonegap都是基于cordova的,cordova是apache开源的

ionic有本身的界面库,最先基于angular,如今也有vue的界面库了,

phonegap是adobe投资的项目,目前貌似不怎么流行了

若是你要作一个移动端的项目,又打算走混合开发这条路的话,

我推荐直接用cordova,仍是很不错的,很是自由!

 

PC端的混合开发就不那么火了,

但有不少大厂偷偷也在用这个技术,好比:鹅厂

若是你要作PC端的混合开发,

你有三条路能够走,

封装IE浏览器的内核、

封装谷歌浏览器的内核

封装Webkit浏览器的内核

封装firefox浏览器的内核

 

若是你要选用IE浏览器的内核,

那么你就不可能考虑跨平台的事情了,

并且,由于你的用户可能使用了不一样的windows操做系统

因此你要作好客户端IE浏览器版本不一致的准备

IE6\7\8\9\10\11...

到IE9才能够称得上现代化的浏览器,市面上不少前端库,也只兼容到IE9

用IE内核来作这个事情的好处是:

你不用把浏览器的一堆DLL,分发给你的客户,这是其余三个方案所不能比的。

 

webkit和firefox真是挺尴尬的

性能表现没有谷歌浏览器好

平台支撑没有IE浏览器好

我对firefox浏览器的Gecko内核几乎没有什么研究

(以前作浏览器插件的时候看过他的API,如今几乎都忘记了)

Qt在去年以前还只有对webkit的封装

我曾经在前年,把webkit和extjs整合起来,作了一个库

你们能够研究一下,但请不要用于生产,我已经再也不维护这个库了

国外也有人用.net封装过webkit,但做者在10年左右,就再也不维护这个项目了

 

终于说到谷歌浏览器的内核:chromium

我实在是不建议直接研究它

你能够看看CEF这个项目

这个项目是用C++对chromium作的包装

以前不支持中文输入法的光标跟随,如今也已经被fix掉了

若是你是C#开发人员,也想用CEF的话,

那么你能够考虑使用cefgluecefsharpchromiumfx

这三个项目我都用过,目前的情况来看,我推荐最后一个

我曾经写过一系列的文章来介绍这个东西

你若是是一个JS开发人员的话,

有我nodejs的庇佑,你彻底不用care   CEF这种东西

你能够直接选用nw.js或者electron

这两个东西,我也都用过,

electron区分主进程和渲染进程,两个进程间通讯要互相传递消息,两个不一样渲染进程间通讯也要经主进程中转,它最大的优势就是生态很是好;

nwjs就没有electron通讯上的复杂度;你能够直接在浏览器DOM里访问nodejs提供给你的一切,但它的生态相对来讲差不少;

这两个东西,因为都打包了Chromium和nodejs在里面,因此安装包都很是大,要六七十兆;

国内有一个朋友作了miniblink,号称全球最小的Chromium开发包(不知道有没有违反现行的广告法,哈哈)

分免费版和收费版两个版本,应该还不错的,不过我尚未试用过!

 

与此相似,还有一个很是厉害,但很不知名的项目,叫sciter

像诺顿、360杀毒、赛门铁克、遨游浏览器,都是用它作的;

它很是小!很是快!有本身的脚本语言(相似JS),有些HTML,CSS的特性是不支持的

它没有绑定nodejs,默认是用C++作逻辑的,不过你还能够选go,rust,C#或者python作,但这些绑定包都是社区提供的,稳定性不明!

 

 

还想再多说一些,但突然发现,篇幅已经太长了,借曹雪芹的一首诗止笔:

满纸荒唐言!一把辛酸泪!一把辛酸泪!一把辛酸泪!.......

相关文章
相关标签/搜索