這篇文章包含了這個領域的不少開源項目的介紹,還有我多年來的心血和汗水php
後來還用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程序的,好比nimx和nanovg
nimx是基於SDL2圖形引擎搞出來的GUI框架
我在nimx上踩到兩個坑,其中一個提交pull request給做者,做者也認了
第二個坑就直接把我坑死了。
nanovg是基於OpenGL圖形引擎搞出來的GUI框架。
這個項目仍是in progress狀態。
總之,這兩個項目都不能用於生產。
(我本想說,國內輪子兄...,但貌似他也已經肉身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完成(這是最大的優點,你能夠用全部與之相關的庫)
全部與界面渲染相關的事情交給瀏覽器內核完成,
全部與系統相關的事情你本身完成
這項技術在移動端用的挺好的,
好比說國外的:phonegap、cordova 、ionic
ionic和phonegap都是基於cordova的,cordova是apache開源的
ionic有本身的界面庫,最先基於angular,如今也有vue的界面庫了,
phonegap是adobe投資的項目,目前貌似不怎麼流行了
若是你要作一個移動端的項目,又打算走混合開發這條路的話,
我推薦直接用cordova,仍是很不錯的,很是自由!
PC端的混合開發就不那麼火了,
但有不少大廠偷偷也在用這個技術,好比:鵝廠
若是你要作PC端的混合開發,
你有三條路能夠走,
封裝IE瀏覽器的內核、
封裝谷歌瀏覽器的內核、
封裝Webkit瀏覽器的內核、
若是你要選用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的話,
那麼你能夠考慮使用cefglue、cefsharp、chromiumfx
這三個項目我都用過,目前的情況來看,我推薦最後一個
你若是是一個JS開發人員的話,
有我nodejs的庇佑,你徹底不用care CEF這種東西
這兩個東西,我也都用過,
electron區分主進程和渲染進程,兩個進程間通訊要互相傳遞消息,兩個不一樣渲染進程間通訊也要經主進程中轉,它最大的優勢就是生態很是好;
nwjs就沒有electron通訊上的複雜度;你能夠直接在瀏覽器DOM裏訪問nodejs提供給你的一切,但它的生態相對來講差不少;
這兩個東西,因爲都打包了Chromium和nodejs在裏面,因此安裝包都很是大,要六七十兆;
國內有一個朋友作了miniblink,號稱全球最小的Chromium開發包(不知道有沒有違反現行的廣告法,哈哈)
分免費版和收費版兩個版本,應該還不錯的,不過我尚未試用過!
與此相似,還有一個很是厲害,但很不知名的項目,叫sciter,
像諾頓、360殺毒、賽門鐵克、遨遊瀏覽器,都是用它作的;
它很是小!很是快!有本身的腳本語言(相似JS),有些HTML,CSS的特性是不支持的
它沒有綁定nodejs,默認是用C++作邏輯的,不過你還能夠選go,rust,C#或者python作,但這些綁定包都是社區提供的,穩定性不明!
還想再多說一些,但突然發現,篇幅已經太長了,借曹雪芹的一首詩止筆:
滿紙荒唐言!一把辛酸淚!一把辛酸淚!一把辛酸淚!.......