爲何
qt成爲c++界面編程的第一選擇
1、
前言
爲何如今QT愈來愈成爲界面編程的第一選擇,筆者從事qt界面編程已經有接近8年,在這以前我作C++界面都是基於MFC,也作過5年左右。當時爲何會從MFC轉到QT,主要緣由是MFC開發界面想作得好看一些十分困難,引用第三方基於MFC的界面庫代碼也是比較混亂,當時主要看到qt有qss樣式設計這個功能,決定試下。當項目移植到到QT後,以爲MFC真的是能夠拋棄了,MFC相對於QT缺點實在太多。固然MFC還有一個致命的缺陷,無法跨平臺。
固然有同窗可能說爲何不直接使用C# WPF作界面,咱們一些項目和工具確實是用C#作的,C#和C++也確實能夠互相調用,而且能夠斷點調試。但在性能上仍是有很多的損失。對於咱們作的音視頻和三維仿真項目確實有影響,因此只在一些對性能沒有極致要求的項目中使用C#。
2、
QT
歷史
說了一些咱們項目的狀況,再來簡單介紹一下QT歷史,知道歷史的目的是要判斷使用此庫是否有風險,是否會中止更新,不少開源庫沒有作好商業化最終都是停掉了。
l QT由奇趣科技公司開發
l 2008 諾基亞從奇趣科技公司收購Qt, 並增長LGPL的受權模式
l 2011 芬蘭的Digia從Nokia收購了Qt的
商業版權,今後Nokia負責Qt on Mobile, Qt Commercial由Digia負責
QT的開發的最高峯是在諾基亞智能手機如日中天的時候,那時候諾基亞塞班系統的手機應用大量都是基於QT,隨着蘋果和安卓的流行,塞班退出歷史舞臺。qt的手機端開發需求也基本被替代。但QT在嵌入式、電力系統、軍工系統中應用一直沒有被替代。
3、
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的虛擬機軟件)
(太多了就不一一列出了)
4、
QT
提供的工具
再看下QT提供了哪些工具,QT不只提供了功能豐富的SDK開發包,還提供了強大的工具,這也是咱們選擇他的緣由之一。
1.
基於
VS
的插件
qt-vs-addin
最新版本提供了2013和2015的版本,舊的版本目前用不起來,但如今c++開發基本主流至少vs2013了。
2. Qt
助手
(
手冊
)
qt的手冊仍是比較完備,而且包含了不少示例的源碼。
3.
基於
XML
的界面設計器
Qt Designer
便捷的解碼設計,應該是c++領域最方便的界面設計器。
4.
跨平臺的開發工具
QtCreator
跨平臺的c++開發工具,應該是在linux上最方便的c++開發調試工具,就算不用QT庫,也能夠用它來開發跨平臺的c++項目。
5、QT
框架優點
最後咱們看下QT有哪些具體優點
1.
工具豐富
這個前面已經對它的工具作了介紹。
2.
功能豐富
出了提供了界面庫以外,還提供了音頻庫,3d庫,數據庫SDK,WebEngine,網絡庫等,讓咱們作跨平臺程序變得簡便。
3.
開源並跨平臺
出了能夠本身經過QT源碼進行移植以外,qt官方就已經提供了再windows,Android,ios,linux中運行的SDK。
4.
架構的優點
這部分優點不少,咱們列出一些示例,能夠看出它的優點。
界面源碼與用戶源碼的隔離,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
{
border-radius:5px;
}
QPushButton:hover /* hover 鼠標懸停*/
{
border-radius:5px; /*圓角邊框*/
}
後面會陸續推出qt相關文章,這篇文章主要作簡介,後面會分塊詳細講解。
老夏課堂 夏曹俊css