為什麼 qt 成為 c++ 介面程式設計的第一選擇?
作者:夏曹俊
一、前言
為什麼現在QT越來越成為介面程式設計的第一選擇,筆者從事qt介面程式設計已經有接近8年,在這之前我做C++介面都是基於MFC,也做過5年左右。當時為什麼會從MFC轉到QT,主要原因是MFC開發介面想做得好看一些十分困難,引用第三方基於MFC的介面庫程式碼也是比較混亂,當時主要看到qt有qss樣式設計這個功能,決定試下。當專案移植到到QT後,覺得MFC真的是可以拋棄了,MFC相對於QT缺點實在太多。當然MFC還有一個致命的缺陷,沒法跨平臺。
當然有同學可能說為什麼不直接使用C# WPF做介面,我們一些專案和工具確實是用C#做的,C#和C++也確實可以互相呼叫,並且可以斷點除錯。但在效能上還是有不少的損失。對於我們做的音視訊和三維模擬專案確實有影響,所以只在一些對效能沒有極致要求的專案中使用C#。
二、QT歷史
說了一些我們專案的情況,再來簡單介紹一下QT歷史,知道歷史的目的是要判斷使用此庫是否有風險,是否會停止更新,很多開源庫沒有做好商業化最終都是停掉了。
- QT由奇趣科技公司開發
- 2008 諾基亞從奇趣科技公司收購Qt, 並增加LGPL的授權模式
- 2011 芬蘭的Digia從Nokia收購了Qt的商業版權,從此Nokia負責Qt on Mobile, Qt Commercial由Digia負責
QT的開發的最高峰是在諾基亞智慧手機如日中天的時候,那時候諾基亞塞班系統的手機應用大量都是基於QT,隨著蘋果和安卓的流行,塞班退出歷史舞臺。qt的手機端開發需求也基本被替代。但QT在嵌入式、電力系統、軍工系統中應用一直沒有被替代。
三、QT現在使用情況
瞭解一下他現在的情況,主要考慮應用場景是否多,就業是否廣,人才是否好招聘。
QT被廣泛應用於嵌入式、電力系統、軍工系統等要與硬體互動的介面系統中,並且大量的專業的跨平臺應用軟體也是使用QT開發。
digia接手QT後開發出了安卓和IOS版本的QT,實現了開發一套程式可以在全平臺執行。但目前不建議使用QT開發安卓和IOS應用,坑還比較多但肯定會越來越完善。
我們列出QT開發的軟體:
1. Autodesk May阿凡達和功夫熊貓的3D動畫製作軟體
2. 在wps的目錄中的可以看到QT的的dll庫
3.
4. google earth
5. 微軟的skype
6. virtualbox(oracle的虛擬機器軟體)
(太多了就不一一列出了)
四、QT提供的工具
再看下QT提供了哪些工具,QT不僅提供了功能豐富的SDK開發包,還提供了強大的工具,這也是我們選擇他的原因之一。
基於VS的外掛 qt-vs-addin
最新版本提供了2013和2015的版本,舊的版本目前用不起來,但現在c++開發基本主流至少vs2013了。
Qt助手(手冊)
qt的手冊還是比較完備,並且包含了很多示例的原始碼。
基於XML的介面設計器Qt Designer
便捷的解碼設計,應該是c++領域最方便的介面設計器。
跨平臺的開發工具 QtCreator
跨平臺的c++開發工具,應該是在linux上最方便的c++開發除錯工具,就算不用QT庫,也可以用它來開發跨平臺的c++專案。
五、QT框架優勢
最後我們看下QT有哪些具體優勢
工具豐富
這個前面已經對它的工具做了介紹。功能豐富
出了提供了介面庫之外,還提供了音訊庫,3d庫,資料庫SDK,WebEngine,網路庫等,讓我們做跨平臺程式變得簡便。開源並跨平臺
出了可以自己通過QT原始碼進行移植之外,qt官方就已經提供了再windows,Android,ios,linux中執行的SDK。架構的優勢
這部分優勢很多,我們列出一些示例,可以看出它的優勢。
介面原始碼與使用者原始碼的隔離,qt的策略是沒有介面都會生成一個對應的原始碼,比如有一個介面設計檔案xps.ui 它會解析其中的xml生成一個對應了ui_xps.h 檔案,這個檔案你不需要修改,如果要呼叫介面中的控制元件直接通過 Ui::XPSClass ui; 這個物件定義也是寫在ui_xps.h中。也就是你的業務邏輯就和介面控制元件物件的建立和設定做了隔離。
事件處理的便捷(靈活的訊號槽機制),qt提供了訊號槽機制,可以很好的降低耦合,提升程式碼的複用性。
例如有這樣一個需求,我的一個XMov類專門處理視訊,但要把處理進度告知外部介面XSlider的物件,我處理方法,可以XMov提供介面給外部獲取進度,或者是主動呼叫外部介面來重新整理顯示進度,第一種方法實時性得不到保障,並且介面端程式也需要引入XMov類標頭檔案,也就是做了關聯。第二種方法使得XMov類的耦合性加大,當介面發生變化是XMov類需要修改。QT中了訊號槽機制可以讓兩個類XMov和XSlider關聯起來,在XMov中直接定義一個訊號函式void SetPos(int),直接繫結到XSlider物件的void SetPos(int) 槽函式,二者互相都不知道,降低耦合性。只在統一的入口類中將各個模組直接的訊號槽關聯起來。
XMov::run()
{
while(!sExit)
{
//處理視訊
int pos = DealMove();
//發出訊號,訊號如果沒有繫結,這步呼叫也不會出問題
SetPos(pos);
}
}
繫結方法
connect(xmov,SIGNAL(SetPos(int)),xslider,SLOT(SetPos(int)))
這就是訊號槽的一種好處,當然訊號槽也是處理各類控制元件的自定義事件。
5、及其便捷的樣式設計(像開發web程式一樣設計介面)
可以很容易的做一個圓角邊框,並且有漸變效果,滑鼠移上去還發生變化,可以參考上面的樣式表,qss基本和css類似,包括支援css的選擇器,可以通過類名,物件名,和父類名稱來設定。
QPushButton:!hover
{
background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(120, 120, 120, 255), stop:0.495 rgba(39, 39, 39, 255), stop:0.505 rgba(39,39, 39, 255), stop:1 rgba(120, 120,120, 255));
border-radius:5px;
}
QPushButton:hover /* hover 滑鼠懸停*/
{
background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(39, 39, 39, 255), stop:0.495 rgba(120, 120, 120, 255), stop:0.505 rgba(120,120, 120, 255), stop:1 rgba(39, 39,39, 255));
border-radius:5px; /圓角邊框/
}
後面會陸續推出qt相關文章,這篇文章主要做簡介,後面會分塊詳細講解。
SAP FIORI開發系列視訊套餐教程
講師介紹:
夏曹俊老師,南京捷帝科技有限公司創始人,南京大學計算機碩士畢業,有15年c++跨平臺專案研發的經驗,領導開發過大量的c++虛擬模擬,計算機視覺,嵌入式影像處理,雲安全審計專案,比賽鷹眼系統,主編出版過《C++實訓教程》,並同時熟悉php,c#,java,安卓專案研發。
課程介紹:
課程講解基於QT5.9 SDK,包含QT介面程式設計的核心內容,並提供全部原始碼,課程講解方式是介面講解、分析、演示示例,課程講解QTCreator在不同平臺的配置方法,linux,windows,mac,課程演示主要以vs2015+QT5.9為主,開始會講解QTCreator配置。課程原始碼基於c++ 11以上版本,建議至少安裝vs2013以上。課程最後會做一個影像編輯器的示例。
課程特色:
專屬答疑+課件資料提供+視訊無限時回放+VIP交流群
開課時間:
隨到隨學,自由支配
點我試看: http://edu.csdn.net/course/detail/6417?utm_source=blog11
相關文章
- 為什麼很多程式設計師都選擇跳槽?程式設計師
- 我為什麼選擇成為獨立開發者
- 為什麼要成為「無敵」程式設計師?程式設計師
- 你為什麼選擇程式設計師這個職業?程式設計師
- 為什麼要選擇做一名程式設計師?程式設計師
- 為什麼成為一名程式設計師?程式設計師
- 程式設計師壓力那麼大,為什麼還要選擇做程式設計師程式設計師
- 你為什麼成為一名程式設計師?程式設計師
- 為什麼程式設計初學者會選擇 Python 作為入門語言?程式設計Python
- DDD之1微服務設計為什麼選擇DDD微服務
- 為什麼選擇Guice框架GUI框架
- Aembit為什麼選擇 Rust?Rust
- 為什麼選擇使用Rust?Rust
- 為什麼要選擇SQL?SQL
- Java程式設計師修煉之路(一)我們為什麼選擇JavaJava程式設計師
- 為什麼為什麼為什麼為什麼為什麼你要做一名程式設計師?程式設計師
- 為什麼美國可以成為科技之都 程式設計從娃娃抓起程式設計
- 作為前端程式設計師的她憑什麼成為Judy團隊第一位助教?前端程式設計師
- 為什麼選擇.NETCore?NetCore
- 為什麼選擇centos系統CentOS
- 為什麼選擇高防DNS?DNS
- 為什麼選擇Cynefin框架? – zwischenzugs框架
- (轉)為什麼選擇機器學習策略機器學習
- 我為什麼選擇 Angular 2?Angular
- Android為什麼選擇binderAndroid
- 為什麼選擇Twitter Storm?薦ORM
- 設計師為什麼要學程式設計,開發者為什麼要學設計?程式設計
- 為什麼選擇Rust作為物聯網的程式語言? - Ash MoosaRust
- 我為什麼說程式設計師會成為最富有的群體程式設計師
- 為什麼選擇ASP.NET CoreASP.NET
- 老闆:你為什麼要選擇 Vue?Vue
- 為什麼選擇PostgreSQL而不是MySQLMySql
- 資質平平的你為什麼不選擇小程式代理?
- IT/網際網路為何會成為大學生求職的第一選擇?求職
- 為什麼CentOS7選擇XFS作為預設的檔案系統?CentOS
- 程式設計沒點為什麼,生活就是十萬個為什麼程式設計
- 程式設計師:為什麼“基礎不牢”成為我薪資被砍的理由?!程式設計師
- 為什麼說選擇正確的程式語言很重要,以及如何正確的選擇