Qt 如此強(qiáng)大為什么就是火不起來呢?

知乎上的一個(gè)問答,站長(zhǎng)覺得挺有意思的,分享給大家。
問:
舉個(gè)例子,Qtdesigner 中直接就有日歷控件,拖過來就能生成一個(gè)簡(jiǎn)易日歷軟件了。Qt 真的很強(qiáng)大,但為什么就是火不起來呢?跟開發(fā)出它的公司不出名有關(guān)嘛?
其中一個(gè)回答:
作者:知乎用戶
鏈接:https://www.zhihu.com/question/53068823/answer/781294779
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
先說結(jié)論,Qt是很多領(lǐng)域是很火的,只不過Qt火的領(lǐng)域我們普通人接觸不到。我們接觸的大部分都是互聯(lián)網(wǎng)應(yīng)用,企業(yè)級(jí)應(yīng)用,這些領(lǐng)域用Qt就是大炮打蚊子。
Qt面向的是什么?首先Qt的第一個(gè)吹牛逼的特性是跨平臺(tái),目前你能想到的操作系統(tǒng)平臺(tái)它都能支持,雖然有部分平臺(tái)支持的不是特別好,但是在比較流行的平臺(tái)下,如Windows,Linux桌面端/服務(wù)端/嵌入式,都是支持非常不錯(cuò)的。BUG雖然有一些,但也算在解決方案內(nèi)部繞過去的那種,致命的BUG不多。
Qt第二個(gè)特性是高效,基于C++的語(yǔ)言決定了使用它做GUI開發(fā),一些輔助功能可以直接使用硬件特性,比如直接操作內(nèi)存什么的,同時(shí)GUI繪制的時(shí)間也是可控的。所以一些嵌入式軟件的人機(jī)交互界面基本上都用Qt實(shí)現(xiàn)比較合理(在資源本來就不行的情況下,跑個(gè)tomcat+瀏覽器簡(jiǎn)直不可能)。
Qt第三個(gè)特性是門檻低,這點(diǎn)有爭(zhēng)議的,這里的門檻是和操作系統(tǒng)底層的GUI相關(guān)的API比較的,只有用過Win32 API,GTK+的才有發(fā)言權(quán)。那些十幾個(gè)參數(shù)的API,想想都恐怖。
那么那些Qt火的領(lǐng)域?yàn)槭裁从肣t呢?那些Qt不火的領(lǐng)域?yàn)槭裁床挥肣t呢?這個(gè)是典型的軟件設(shè)計(jì)架構(gòu)問題。我能用蒼蠅拍子解決的問題,為什么用大炮呢?先說Qt火的領(lǐng)域
國(guó)內(nèi)的電網(wǎng)領(lǐng)域:早期的(90年代)電網(wǎng)自動(dòng)化軟件都是國(guó)外的,菜一點(diǎn)的都是跑在NT4.0上的,高級(jí)一些的都跑在Solaris上的,然后國(guó)內(nèi)開始仿制(那個(gè)時(shí)候已經(jīng)WinXP了),一看國(guó)外的系統(tǒng)既可以跑在Win上,又可以跑在Unix上,Linux又開始慢慢流行。你說那個(gè)時(shí)候的設(shè)計(jì)師選什么作為圖形框架?首選Qt3啊,那個(gè)時(shí)候Java還不知道在哪里呢?,F(xiàn)在國(guó)家電網(wǎng)南方電網(wǎng)又在推廣國(guó)產(chǎn)操作系統(tǒng),所有的生產(chǎn)控制系統(tǒng)都是基于Linux的國(guó)產(chǎn)操作系統(tǒng),那些早期用MFC的,實(shí)時(shí)系統(tǒng)轉(zhuǎn)Qt,非實(shí)時(shí)系統(tǒng)轉(zhuǎn)Java。這個(gè)領(lǐng)域用了Qt的跨平臺(tái)和門檻,畢竟那個(gè)時(shí)候的程序員能用好操作系統(tǒng)底層API的太少了。
汽車領(lǐng)域:大家看到的車機(jī)系統(tǒng)早期是WinCE的,非??ǎc(diǎn)一點(diǎn)反應(yīng)一秒鐘,后來逐步是Linux,然后是Android,反應(yīng)快一點(diǎn)兒了。汽車儀表盤的實(shí)時(shí)性可比車機(jī)要高的多,早期的儀表盤都是指針+單色液晶,就是一個(gè)很簡(jiǎn)單的裸片子控制,連操作系統(tǒng)都不上,為了就是實(shí)時(shí)性。要是你已經(jīng)加速到了120,但是儀表盤上還是60,那你不瘋了。現(xiàn)在的儀表盤要么是廠家自己定制的Linux,要么就是QNX,但是在圖形框架上絕大多數(shù)用的是Qt,C++的特性保證了硬件性能實(shí)時(shí)掌握在程序員手上,要是瞄一眼儀表盤的時(shí)候,這個(gè)時(shí)候Java正好GC了……這不是都是利用了Qt的高效性質(zhì)。
其他火的領(lǐng)域就不一一說了,比如視頻監(jiān)控,軍工控制。
我們接觸的比較多的領(lǐng)域是互聯(lián)網(wǎng)和企業(yè)應(yīng)用,那么為什么這些領(lǐng)域現(xiàn)在的不青睞Qt呢?
首先跨平臺(tái),說跨平臺(tái)貌似沒有多少能比JVM做的更好的了,管你什么硬件平臺(tái),基本上都有能用的JVM版本,至少在跨平臺(tái)上面Qt并沒有絕對(duì)的優(yōu)勢(shì);
其次是效率,這些應(yīng)用很少那種批量數(shù)據(jù)處理解決大批量數(shù)據(jù)的問題,即使有,也可個(gè)作為核心模塊,使用專門的技術(shù)解決(比如MapReduce等,這些領(lǐng)域通常硬件資源是無限的),更多的關(guān)注的是業(yè)務(wù)流程,所以基于C++的Qt并無太多優(yōu)勢(shì);
然后是門檻,雖然Qt框架的門檻比直接使用操作系統(tǒng)API要低,但是比C/C++門檻低的高級(jí)語(yǔ)言多得是啊,部分Java框架在語(yǔ)言層次上和Qt比較簡(jiǎn)直毫無下限;
最后是,使用流行的Java,Python之類的能干的活,為什么要用C/C++的Qt呢?畢竟人家用Maven和Pip方便多了。
總之找不到使用Qt的理由。
