一、Qt跨平臺開發的一點疑慮
??Qt能跨平臺開發,這是大家都知道的,但是,真的做起來不是那么容易,很多公司的客戶端也沒也完全用跨平臺框架來開發,而是在windows, macOS,linux上各搞一套,比如windows用DuiLlib、Qt、或者自己寫的UI框架;macOS則用swift / oc,如果用Qt進行windows和macOS跨平臺開發,是要慎重考慮的,最好windows一套代碼,macOS盡量用swift/oc來做,很多東西在windows上解決方案很多,用C/C++基本都可以搞定,但是在macOS就不一定了,雖然C/C++/OC/swift可以相互呼叫,但是這增加了代碼復雜度,也對開發人員的技術有很大的考驗,
二、開發建議
??下面分享一下Qt客戶端開發的一些個人建議
2.1 IDE選擇
??用Qt做界面庫,IDE可以用QtCreator和VS,如果不考慮跨平臺,那么在windows上就用VS, 除錯、專案管理也很方便,QtCreator能做的,vs也能做,而且VS和QtCreator專案可以相互轉換;linux那就用QtCreator吧,另外現在比較新的vscode和clion也是可以嘗試,不過主流依然是QtCreator和VS,vscode免費,但是專案配置麻煩,除錯也不太方便;CLion是收費的,很少有公司用,用盜版很容易被律師函警告的,JetBrains在IDE領域基本已經通吃了,每年花費2000元就可以享有所有編程語言的ide使用權,
2.2 通用庫的選擇
??專案開發,必然要使用到各種庫,比如日志庫、網路庫、執行緒庫等,
(1) log
??如果用C++開發,log那么可以考慮glog、log4cplus、log4cpp,如果覺得個人功力深厚,也可以自己封裝一個log;Qt也有第三飯log庫,比如QsLog,
(2) 網路庫
??用Qt的話,Qt本身支持網路開發,http、tcp、udp、ftp等都可以,如果不想用Qt網路庫,那么可以用系統庫,windows, linux都有自己的socket, 不過有一點不好的是,系統庫可能不跨平臺,如果需要和后臺java/php等進行介面的呼叫,可以考慮QtNetwork框架,或者用libcurl,二者都可以進行get、post.
(3)執行緒庫
??Qt對thread有支持,可以使用QThread進行開發,當然C++ 11之后,從語言層面解決了多執行緒得跨平臺問題,可以用std::thread代替其它得執行緒庫,
(4)圖表曲線模塊
??一些嵌入式,監控行業,可能會用到圖示,QCharts支持各類圖表,之前的QCustomPlot,QWT等也是很好的圖示曲線組件,但是我要提一嘴ECharts, 這是百度開源的圖表組件,這是我目前見過的最好的圖表庫,利用Qt web互動技術是可以使用ECharts的,然后動態系結資料即可,
(5)編碼規范
??每個公司都有自己編程規范,入職時得先了解,不然寫起代碼來,隨便搞,那就很不協調了,有強迫癥的看到,估計很不爽,必須改過來,你一改動,就會觸發git沖突,對別人也是一種侵犯,這就是業內的一種現象"不要瞎該我的代碼",業內比較正規的有google C++規范,華為C++編碼規范等,或者更具專案需求,自定義一套規范,對于入職的新人讓他們先學一學,
(6)開發流程 git follow
??git follow沒得說,就當作標準來執行吧,
2.3 復雜頁面設計
??像一些簡單的頁面,用QWidget或者Qt Designer是可以慢慢搞出來,就拿優酷界面來說

??優酷客戶端用到了Qt/QML,標題欄和左側欄相信有一定基礎的人能做出來,首先需要把視窗邊框去掉,然后自己寫一個標題欄,左側布局用QListWidget輕松實作,可以看看我的實作【教你用Qt手寫優酷客戶端界面】,但是中間區域呢,用QScrollArea是可以做,但是太復雜了,而且需要實時的更新,那么必然得和后端互動,那么用前端web技術應該就比較好實作,讓前端去做那些視頻的布局,播放解碼用web技術也是可以實作的,用Qt ffmpeg之類的也可以,問題不大,下面是優酷的網頁版:

??是不是和客戶端界面很類似,這些視頻視窗估計有上千個控制元件了,用web技術是最好的解決方案,用Qt得寫到什么時候,而且用web得話,跨平臺方便,在windows, macOS, 移動端直接調html,基本可以保持效果一致,而且對于播放來說,應該是類似m3u8這種檔案,一個url就可以播放,解決了跨平臺得麻煩,
??wps的稻殼商城,應該也是用web技術做的,

??Qt和web的互動現在已經做的很好了,QWenEnginView對chrome的支持很友好,可以達到cef的效果,
2.4 自適應解析度
??在我的Qt進階文章中有談到關于分辨自適應問題,現在筆記本電腦都是2.2k, 2.5k, 3k乃至4k解析度,你在公司1920*1080的顯示幕上開發的界面效果在別人電腦可能就不一樣了,此時就需要自動的改變Qt控制元件的大小,圖示也盡量使用svg圖,而不是png,Qt本身對視窗自適應的屬性也有支持,大家可以去測驗看看,
2.5 跨域語言、中文亂碼問題
??關于這個,得用翻譯檔案來做,問題不大,
2.6 exe打包技術
??安裝包制作,方案很多,可以使用NSIS或者Qt原生的IFW技術,
2.6 模塊劃分
??小專案隨便寫寫,一個人擼完也不是不可以,大專案呢,盡量把功能分開,能封裝成dll就做程dll, 提供介面,外部呼叫,這樣在協同開發時也方便,對于軟體更新也有幫助,
2.7 軟體更新
??當用戶安裝軟體后,后續更新怎么做呢,就是怎樣把服務端新的安裝程式下載到用戶電腦上,現在客戶端技術已經是達到頂峰了,這塊兒一般也是需要前端來做的,比如增量更新,在啟動客戶端時,檢查本地版本和服務端的版本,相同的檔案進行下載,不同的不下載,這一塊兒我也沒有深入研究,相信有更好的技術來顯示,
2.8 資料埋點
??埋點這種行為,有點竊取用戶隱私的做法,但實質也沒什么傷害,只是讓運營商更了解用戶對軟體的使用情況,這個一般是產品經理超濾的事情,他們說怎么做,開發就去實作,現在埋點都有服務商提供,花錢買就可以了,
三、Qt就業環境
??關于就業趨勢我在之前的文章也講了一些,雖然崗位不多,但是依然可以要口飯吃,一些大廠也有相應的崗位,例如很火的抖音,位元組跳動提供了視頻剪輯工具“剪映”,它就是用Qt/QML開發的,以及WPS客戶端、斗魚客戶端、優酷客戶端、UOS等都是用Qt開發的,Qt/MFC等windows界面開發依然是有不少崗位,但沒有java python 大資料 人工智能那么多,畢竟是流量為王的時代,移動端,大資料,深度學習,資料挖掘等是大趨勢,客戶端開發在這大環境下能分一杯羹也是不容易的,另外比較重要的一點是C++前端和web前端有很大的區別,web前端更多的是業務展示,不涉及領域的知識,但是C++前端的作業,大部分情況下是要兼顧相關領域知識,比如做音視頻,視頻的顯示,音視頻同步等,做圖片演算法的,圖片的展示,記憶體的處理等,做其它行業也是一樣的,不能只關注界面的效果,相關領域的知識也要深究,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/290088.html
標籤:其他
