Qt桌面開發的困惑?


謝邀。

根據題主描述,我總結題主的需求是:

考慮Qt的QtQuick框架,界面用QML開發, 使用Controls2控制項,支持的系統要從XP到Win10

關於答主的問題:

1. c、c++第三方庫太散了,有沒有系統的或者組織化的第三方庫,比如python,pip就搞定卻大部分的需求。或者說大神們都怎麼找庫,除了自己造輪子,同需求的庫,在斟酌和選擇上真的就要花很多時間啊。

其實Qt本身已經有很多庫了,日常開發我不敢說100%夠用,90%夠用基本沒問題,比如說XML、JSON、日誌、測試、資料庫等。所以我的建議是Qt能解決的,盡量都用Qt自己的庫。不要入導入第三方的庫。

其他的,Qt自己肯定解決不了的,比如說opencv、代碼混淆加密,這些,多半需要自己去編譯或者下載編譯好的庫,再在Qt里導入下即可,不麻煩。

另外,其實在開發過程中我們也會發現很多庫,Qt都故意不在支持或者沒有集成。這有些和協議有關,比如說SSL、視頻格式擴展,Qt自己都是沒有的,需要外部鏈接進來。

2. 企業環境複雜,從xp到win10,web應用就好解決(大不了統一chrome),桌面端,想要最新的Qt特性,又想支持xp,就要手動編譯,可能不算個問題,編譯的課補上就好。

其實這麼說的話,沒有什麼非常完美的解決方案。

因為支持Controls2的那些高版本的Qt,往往在支持XP上多多少少有問題,低版本的Qt,QtQuick或者說QML本身完成度也不高,這主要體現在內存佔用,載入速度方面。如果你覺得這些不是問題,就算只考慮低版本的Qt,那麼對於企業內部那些XP電腦,配置奇差無比的那些,都是集顯時代的配置,OpenGL不一定能得到很好的支持,跑QtQuick都不一定跑的起來。尤其是用了GraphicalEffects這個庫後,基本上和低配電腦無緣了。當然Qt現在有lite計劃,去掉了OpenGL依賴,不過截至我回答,這個lite還沒有正式發布。

或者說,其實你只是要QML這樣的語法,開發的便利,還有Qt的底層那批庫,你也可以在一些限制下,開發出一個支持從XP到Win10的軟體。但是我覺得和開發一個支持Win7到Win10的程序相比,差別太多了。


總算有一個真正搞懂qml的同行了……贊一個。

pdf么……題主可以下個Poppler庫,專業用來渲染pdf的,並且專門為Qt提供了介面。

另外,不造QWebEngine支不支持直接打開pdf……按理說新點的瀏覽器都有這功能的。

或者用QDesktopService調用系統默認打開方式打開算了……反正只要沒有在程序內修改pdf的需求,並不是非得在自己的窗口裡開么……

不過話說回來,Qt提供了生成pdf的類,卻沒提供瀏覽pdf的類,這也是個槽點呢……

C/CPP由於歷史原因,類庫太多而且良莠不齊,版本差別太大,不同編譯器,乃至同編譯器不同版本的二進位介面都不同,所以一直沒能有一個很好的包管理器。

因此,C/CPP的類庫,只能靠口口相傳,或者去各大網站比如sourceforce、github上搜咯。

比如Boost、folly、opencv、gmp、qwt神馬的……

Qt要發布xp版倒是挺簡單,一個是用直接支持xp編譯器的Qt版本,不過可能版本比較老。一個是在xp上手動裝個最新版的vs/mingw,然後下Qt最新版源碼手動發布個Qt版本。唯一需要擔心的就是高版本的QWebEngine對xp支持好不好。至於其他Qt自有的API么,對系統差異還是封裝的很不錯的,畢竟這是Qt最大的賣點。

另外,即使沒有xp這種特殊平台需求,手動發布Qt版本也需要學習下——因為官方沒提供靜態鏈接版,靜態鏈接得自行發布(不過開源版LGPL不允許靜態鏈接,只能在個人項目玩玩了,商業版沒用過,應該是要提供了發布好的靜態版吧)

C#么……最近剛買了書打算了解下,其他部分不是很清楚,但大名鼎鼎的linq和async,CPPer實在是眼饞了好久了……

至於C#先天提供的數據綁定、反射,這些XAML賴以生存的高級特性,Qt QWidgets和Qt Quick也都有的。MVVM倒是沒有,只有model-view-delegate,如果要的話得自己造輪子。


1】 第三方庫編譯問題

要看你的項目都用到了什麼第三方庫,一般不會太多的,三五個吧,不會有幾十個,除非特大的項目。花些體力,就搞定了。

如果是在Linux,比如Ubuntu,可能apt就夠用了。

在Windows下,只能自己搜索第三方庫,要麼找別人預編譯的,要麼手動編譯。手動編譯的話,如果你找到的第三方庫有CMake工程,可以直接導入Qt中編譯;如果沒有,也可以用cygwin或msys來編譯;或者自己建立一個Qt pro。

2】多Windows版本

比較簡單的解決辦法就是:產品代碼用一套,分別在XP、Win7、Win10上運行不同版本的Qt SDK來編譯。當然需要注意不同的Qt SDK版本之間的特性差異。


我看到近年別人開發的成熟網路應用的是webkit加qt,瀏覽器調用c加加,發布了windows mac兩個版本,ios端也有不知道是不是qt,qt quick不太成熟。用戶對界面要求很高,普通軟體界面html是趨勢,否則你要象wps一樣,手工設計界面,成本很高。


qt5.8目前還沒在xp下運行過,測試了下,不行,以後再說;

qt5.7編譯的可以在xp運行,測試過了;比它低的都可以;

企業軟體xp支持,確實是個問題,哪些政府單位內部好多還是xp系統,奶奶的都一堆病毒,也不升級;

qt5以上都用webenginer,這個對xp也是考驗,webkit兼容好些,但內存泄露厲害,還不止html5,也是頭疼。。

如果有嵌入式的需求,qml還是別用了,入門是低,但學一門語言就為了搞qtquick真有點浪費,還不如學點js和html5,反正混合編程是趨勢。。


我的建議是就用QT的庫和STL,能不用第三方庫就不用第三方庫,因為大部分時候你所想用的第三庫的功能僅僅是其一小部分功能,自己寫代碼實現和你去學習掌握一個第三方庫所花時間是一樣的。


qt使用的確方便,包含了好多東西,但是沒有找到比較深入的書,大多自己看文檔。最近在用qss,感覺是真的好用,讓嵌入式設備上軟體界面看起來好多了,又花不了多少資源。


推薦閱讀:

PyQt4教程的對話框(QInputDialog)例子里的一段代碼,為什麼要這樣寫?
有哪些顏值高的 PyQt/Qt 應用?
cmd打命令的時候,有時參數是個很長的路徑,輸入非常麻煩,怎樣解決?

TAG:QtC開發框架 | QtQuick | PyQt |