Qt 為什麼在桌面應用(Windows 平台)中不流行呢?
qt的面向對象特點鮮明,也較為簡單易學,為什麼火不起來?windows下桌面應用太少,是不是有什麼大的缺點?
因為Qt是給兩種應用設計的框架。
一種是必須跨平台的應用,無論如何都要支持兩個或以上平台,並且兩個平台要求功能同步,交互體驗基本一致,但是開發成本不能成倍增加,Qt基本就是最好的選擇了。第二種是規模很大的應用,源代碼規模在至少30萬行以上,並且帶有複雜UI交互,對發布的時間進度有較高要求,開發組規模在10人或以上。不符合以上兩種情況的應用雖然也可以用Qt開發,但是和用其他技術比起來沒有特別突出的優勢。
符合以上條件的應用當然數量是不多的,所以題主見過的也就很少了。
但是這種應用的用戶規模未必就小,比如WPS,YY都是用戶上億的產品,VirtualBox應該也是千萬級用戶量的。Adobe Google Blizzard AutoDesk都在自己的某些產品里用過Qt,百萬級用戶量也是有的。反倒是 MFC 這種框架,似乎人人都會,到處都看到有人在用,其實真正大用戶量的產品極少是MFC寫的(我一時都沒想出來有哪個,誰提個醒)。qt的應用層主要是大型3d,vr,管理軟體和器械嵌入軟體。日常生活中所用的qt產品比較少。也就
virtual box,google earth,VLC player等。但是大型系統就正好相反,這是c++決定的,而非qt。除了Maya之外,包括Houdini,斯特拉電車的系統軟體等一大批3d軟體都是qt寫的,或者qt參與其中,qt(c++或python)是houdini默認二次開發環境。
美國宇航局,歐洲宇航局,多個發達國家的地理信息,國土部門是默認qt平台開發。是默認qt開發,宇航局緊急編程系統是qt的python系統。
3d軟體幾乎不能脫離qt,除maya全部使用qt外,autodesk的很多軟體都用到qt,測試也用qt。幾乎所有vr和遊戲引擎都用到qt,其中包含cryengine。catia是世界最大最難的軟體系統,全世界所有高級開發(飛機,宇航,汽車,工業,生物)全部都是caria設計的。
Siemens NX是僅次於catia的軟體。這些軟體都有些核心模塊qt參與開發,在波音,龐巴迪,洛克希等等公司,qt是catia開發模塊的默認模擬開發平台。其中波音公司用的最多(並非所有catia項目都運行在qt。但是有些項目只能,必須運行在qt)。BlackBerry和全世界多數新的核電站控制系統,能源控制系統都是qt下開發的。
最先進的能源,防禦控制系統,艦船控制系統,是qt下開發的。國家情報和管理系統控制中心:幾乎全世界所有國家的中心控制中心(防禦,情報,應急),都是基於qt開發,或者是正在轉qt了。前段時間大家爭論中國銀行系統能否去IBM等公司的技術,但是大家不知道ibm等公司的金融業核心技術是在qt上開發的。
華爾街多少精英每天打開電腦牆壁(至少4個顯示器),其中至少1個是qt做出來的軟體,另外一個是qt的python即時編程平台。
美國一大批大公司,政府,軍方使用的軟體都是qt或者qt參與其中,這些軟體都是幾億美元以上。
現在美國政府,科研和軍方,同時有上千個下一代軟體黑科技項目是qt的了。
因為有人恥笑Qt,所以補充發個例子,其實是目前世界上整合難度最大的系統。
本人沒有任何認識的人在這個項目工作,所有信息來自於美國媒體的公開信息。以下說一個公開的項目,是最近最熱門的武器系統(再次,特別指出,這是都是公開信息):超級戰艦DDG1000「朱姆沃爾特」級驅逐艦:朱姆沃爾特級驅逐艦:這個最新完工的項目即便在美國也是在報紙上瘋狂了一陣子,軟體系統難度,超過了歐洲和美國宇航局的宇宙信息系統(歐洲版虛擬宇宙公開宣傳是在Qt開發,qt實時干涉,美國的按照招聘來看也是在qt開發,但是沒有公開信息),系統運行於實時類linux,是Lynx OS,兼容linux,Qt是整個開發的中心平台,相當多模塊是完全在Qt下開發的,可不僅僅用於UI,包括Qt的手機,android,ios,3d都被使用,嵌入式開發更被使用。主體防護,預警層,完全是個虛擬現實的遊戲開發,3d環境和雷達,衛星,火控完全整合,Unreal引擎和Qt3D,OpenGL結合,並且和CAD,CAM結合(船體具備某些製造功能)。
DDG1000是第一個3d顯示預測結果的武器系統,導彈未經發射前,模擬器即可實施顯示發射結果以及結果數據,並且數據和指揮中心同步,艦船將逐步實現了遠程控制(二期代碼升級2018年實現)。是目前世界上整合難度最高的軟體系統,qt在其中佔有重要位置,不僅僅是UI。Qt在DDG1000的使用,不僅僅是開發過程,Qt最後被整合到控制中心,程序員跟隨艦隊隨時用Python等語言在Qt工作。
DDG1000系統,又要整合在其他Qt開發的系統,並且在不同控制中心通過Qt協作。
DDG1000系統是經過60多年發展的一個系統,很多尖端模塊甚至在計算機沒有發明之前就已經開始研發(按照概念可能性)。 這個系統會不斷進步。但是很多超級功能還需要10年-20年才能分布實現。
DDG1000系統在美國屬於級別最高的工程之一,即便是其中最次要的工程,也需要美國公民經過政治審核才能參與。
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
以上說的還僅僅是qt平台,不包括visual studio,eclipse,intellij下的qt插件使用。也不包括金融公司的qt下java使用。這個還是和歷史有關啊、、現在基於Qt的桌面軟體越來越多的、、、許多GTK的也在向Qt遷移、、
可以說在XP時代,微軟自己有一套MFC,和成熟的vs系列開發工具、、
而Qt-Creator是09左右才有項目。Qt早期的授權協議也是商業為主,開源部分是QPL,這個沒有LGPL那麼開放的。MFC後來淡出視野,在微軟的平台上出現DUI這種直接繪圖的了、、而專門做win軟體的也慢慢有自己封裝的UI庫了、、開源軟體來說,很多當時也是因為協議的問題用的GTK,所以相對Qt也就少了、、而09年Qt也以LGPL授權之後,授權的擔心才可以消除的、、而09之後,DUI技術也成熟了、大多說win客戶端也遷移的DUI了、、開源軟體倒是開始選擇Qt多了、現在在開源軟體中UI大多都選擇Qt了,好多也在遷移,LXDE都在遷移到Qt、、一些需要跨平台的軟體也遷移到Qt了,例如WPS、、、Qt是沒有什麼問題的,只是在09之前Qt的開發和授權不是自由軟體的,用開源版本可能面臨版權糾紛的,09年以LGPL和GPL授權之後,而且開放開發之後才沒了授權問題、、update:
蝦米windows客戶端.
暢遊大廳. -----------------------------------確實不是很多, 出名點的就是yy, wps吧. 為知筆記的linux版也是, 易改翻譯什麼的.但是使用Qt開發的軟體越來越多了. 還有就是跨平台的軟體, 很多都是Qt寫的界面吧. 比如virtualbox, ida, slickedit, tiled....因為mfc為微軟官方的。但Mfc為c++發展初期,大量使用宏,但當年windows火紅時是最牛的開發工具。而qt相對比較年輕,又有跨平台需要,所以用戶相對變少。
但現在看來mfc開發的程序只能運行於windows平台,而qt開發的軟體通過編譯可以跨平台。
現在很多互聯網公司搞的客戶端,都有linux,osx,windows多個版本,很多都是獨立開發的,或使用內部庫,但這樣成本很高。這種方式造成多個客戶端更新不同步,功能有限,維護複雜,開發成本高,等很多問題。
wps因為使用了qt,所以跨平台容易。無論大小公司,新開發軟體建議使用qt,因為其他平台開發成本和qt差不多,但qt代碼復用好,能節省開發成本和降低複雜度。就算目前只運行於windows下的軟體,也建議用qt,因為那一天跨平台了,可以贏得更多用戶。
自已開發一套跨平台ui界面,如firefox xul,成本高,不成熟。也不利於學習交流和招人。
Autodesk maya,wps,skype,這些軟體使用人數都很大,跨平台特徵能贏得更多商機。qt設計的初衷就是跨平台,就是它只能在原有系統(linux,windows和macos等)系統基礎上去抽象共同的介面,類似於設計模式的bridge模式,這就導致了不能充分發揮原有系統的特色的界面特性,雖然看起來界面是一樣的,但是性能上講就有一些偏差,進一步導致了沒有移植需求的項目採用自身平台的api。qt確切的說包含了非界面的東西,但是大多數人認為它僅是一個界面庫,linux類的系統基本上都是後端伺服器角色,也導致了linux上開發應用時忽略qt。另外每個平台自身的開發工具和使用習慣也導致了通用界面庫不夠流行。微軟的visual studio不管怎麼說都是非常具有生產力的IDE之一,裝了visual studio之後直接就能用win32和mfc,非常方便,更為強大的是還有一些bcgsoft和codejock之類的界面擴展。qt這些年發展確實挺快,尤其是從nokia分離之後,採用LGPL加快了推廣力度,android、ios、以及其他的嵌入式平台均可使用,能夠快速開發qml、基於chromium的webengine,使用javascript v8引擎後的腳本綁定系統,以及能夠使用類似css配置界面的腳本技術,python綁定,傾向性的代碼和數據分離設計思路等,預計以後發展勢頭比較猛。渡世白玉兄的見解很獨到,DUI這種技術其實是與某種業務關聯性比較強的,比方說qq的界面技術放在做信息系統就不合適。現在qq內嵌chromium的方式倒是多見。
一,Qt其實挺好用,設計也比較先進,但代碼量實在龐大,要搞透,需要的精力不亞於自己寫一個簡單點的但也能滿意需求的ui庫。二,編譯後體積龐大,qtcore里一堆與ui無關的東西,還不太好裁剪。三,為支持跨平台,引入了很多複雜度,但國內pc產品,有幾個需要跨平台的。四,有實力的團隊都願意自己造輪子,滿足成就感。
Qt的商用授權需要付費。基本上大的第三方軟體,如QQ、迅雷等,都有一套自己封裝的界面庫。使用Qt的軟體,大部分都是開源軟體;或者開發商不願意自己耗費精力去封裝界面庫,比如豆瓣FM和YY語音。
ref:Qt
今天偶然發現onedrive最新版(17.3.6517.0809)程序目錄也有Qt5的庫,這屬於巨硬抽自己臉么
大體幾點把。
1)大型的軟體或者大型公司一般因為界面庫都多少有些不滿足需求的地方,一般會自己開發一個界面庫。而且一些專有領域,比如遊戲的UI等,因為渲染等,不會用這個。2)MFC 遺毒還比較深,很多當年的小工具還是用MFC搞的,當然其實界面也不是真的MFC,是用的一些MFC UI擴展庫。我自己2013開發的小工具還被迫用MFC。(當然非C++的都投奔WPF了。VS2015都已經開始嫌棄MFC了。)3)WEB UI 也佔據了很大市場了。4)Qt這些年的發展也比較坎坷,沒有後面的完全開源,遠不會有今天的成功,也算是成也諾基亞,敗也諾基亞,後面在手機領域的慢半拍等,也限制了他的發展。5)編譯工具,鏈條,社區,還不是那麼完善。比如繼承在VS裡面,比如最新的VS2015,Qt的集成就比較初步,工具鏈就慢半拍。其他工具用起來吧。都不是那麼順手。6)MOC這種編譯模式,雖然無傷大雅。但總歸讓人覺得不太純正。7)跨平台好是好,當然也是包袱。我最近兩年在用QT,我的評價是,如果用C++開發原生界面。還是投奔Qt把。真簡單。
MFC那個害人東西,還是扔了吧。國外遊戲界對Qt的應用很多,許多跨平台的遊戲開發工具都是由Qt編寫的,暴雪的戰網登陸器也是Qt的……國內幾乎全是MFC……
Qt一直被母公司坑的很慘,把整個智能機時代都差點錯過了,換了東家後,在國內的商業運作也不給力,這對於Qt的推廣是不利的……
微軟的本地化支持一向很牛,資料全面……這方面Qt是個小公司,Qt上手比MFC快得多,但是資料比較少……習慣吧
偶的大多桌面代碼都是delphi(c dll)cocoa(osx)delphi多了跨win osx在慢慢轉qt/qml,這東西是真跨平台 一套代碼哪都跑win linux osx webqt 體積有點大,部署不方便,版本更替變化挺大的,雖然官方提供了例子但是我實在看不出qt 開發的界面 好在哪裡。
並不比 C# 的 winform 美觀。
開發工具 也不方便。 插件什麼的兼容問題
目前我機器上有vs2015 vs2017 但是沒法開發qt4 qt5 我又嫌qml 麻煩 而且依賴什麼的 感覺太龐大了
QtCreator4.3 貌似僅支持qt5.
但是qt5 真心一般。
補充:
qt5 Quick 2 程序 打包過程非常噁心。
雖然 qt本身對比 C++來說 真是好太多了。不過,如果對比C#的ui 或者web 來說還是有一定的不足。
Qt的程序需要帶上很多Qt的庫,這樣體積會大出很多,其實這也是一個原因
Qt在非互聯網行業的應用還是比較多的,比如國防軍工、嵌入式工控之類的,一般人很難接觸到,算是一個原因吧
1。因為微軟的資料庫全,以前寫書很多都是mfc,很少有人寫qt,國人沒中文書如何學?英文的?算了吧,偷個懶嘛。還有一直就英文屁的更沒法學,英文少的來做這個的少,英文好的出國的多。2。微軟投了很多錢推廣,估計很多人都沒聽過qt。3。微軟的東西唯一缺點是要錢。國內版權意識低,等於不要錢。4。微軟東西驗收好糊弄。比如網站建設,尤其是公家的,只能在ie7客戶端上正常使用,因為只要能支持ie負責驗收那幫人就搞定了,管你啥標準,符合標準成本高,油水少。
很多人拿MFC來比,桌面應用不是wpf/C# 最常用嗎?比簡單方便怎麼跟C#比啊。無論是從界面實現還是線程式控制制,協程應用,這些都不是對手啊。
恕我直言,在市面上的中文qt圖書,都是..咳...沒有一本靠譜。
———正在看《foundation of qt development》
匿了
Qt早期有許可證限制,我記得當時只有GPL
動態鏈接體積略大,靜態鏈接需要自己編譯且多個版本的Qt或多或少會有些需要源碼改動的地方
用mingw還是msvc是個問題
自己獨有一套編譯系統,需要額外學習
有些人比較害怕元對象系統和Qt自己的預處理
長期以來對模板的支持差強人意
社區支持沒有mfc廣泛
在微軟的平台上用微軟的開發套件比較順理成章
還有一些原因,一時間想不起了我以前試過用qt4.8寫工具給客戶,被噴過為何安裝包體積這麼嚇人
推薦閱讀:
※當面試官問我C++ 11新特性的時候,應該怎樣回答?
※既然c++模板元編程是圖靈完全的,那麼刷leetcode的時候如果都用模板元編程,能不能全刷成0ms?
※如何使用C++實現一個and函數?
※如何在 C++ 代碼中提示編譯器某個分支的執行概率高?
※C++定義一個函數,返回值為一個對象,如何想辦法返回一個邏輯上的空值?