為什麼qt成為c++介面編程的第一選擇

來源:互聯網
上載者:User

標籤:qt   qt creator   qt開發   qt designer   qt 教程   

一、前言

為什麼現在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曆史,知道曆史的目的是要判斷使用此庫是否有風險,是否會停止更新,很多開源庫沒有做好商業化最終都是停掉了。

l QT由奇趣科技公司開發

l 2008 諾基亞從奇趣科技公司收購Qt, 並增加LGPL的授權模式

l 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:在wps的目錄中的可以看到QT的的dll庫

3.金山詞霸

4.google earth

5.微軟的skype

6.virtualbox(oracle的虛擬機器軟體)

(太多了就不一一列出了)


四、QT提供的工具

再看下QT提供了哪些工具,QT不僅提供了功能豐富的SDK開發包,還提供了強大的工具,這也是我們選擇他的原因之一。

1. 基於VS的外掛程式 qt-vs-addin

最新版本提供了2013和2015的版本,舊的版本目前用不起來,但現在c++開發基本主流至少vs2013了。

 650) this.width=650;" src="https://s1.51cto.com/oss/201711/16/111af113cde2830688f25c6a94bbc450.jpg-wh_500x0-wm_3-wmp_4-s_105735737.jpg" title="7.jpg" alt="111af113cde2830688f25c6a94bbc450.jpg-wh_" />

 

2. Qt助手(手冊)

qt的手冊還是比較完備,並且包含了很多樣本的源碼。

650) this.width=650;" src="https://s5.51cto.com/oss/201711/16/dfc182826b30ae99f1b1211f8bd67dbf.jpg-wh_500x0-wm_3-wmp_4-s_1232369123.jpg" title="8.jpg" alt="dfc182826b30ae99f1b1211f8bd67dbf.jpg-wh_" />

 

 

3. 基於XML的介面設計器Qt Designer

便捷的解碼設計,應該是c++領域最方便的介面設計器。

 650) this.width=650;" src="https://s2.51cto.com/oss/201711/16/2360b29267523078049b88f4abd0b0fa.jpg-wh_500x0-wm_3-wmp_4-s_2430968875.jpg" title="9.jpg" alt="2360b29267523078049b88f4abd0b0fa.jpg-wh_" />

 

4. 跨平台的開發工具 QtCreator

跨平台的c++開發工具,應該是在linux上最方便的c++開發調試工具,就算不用QT庫,也可以用它來開發跨平台的c++項目。

650) this.width=650;" src="https://s4.51cto.com/oss/201711/16/f77d9d7dd952d8ccf8fec319b597f24a.jpg-wh_500x0-wm_3-wmp_4-s_1613925646.jpg" title="10.jpg" alt="f77d9d7dd952d8ccf8fec319b597f24a.jpg-wh_" />

 

 

五、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);

}

}

 

Binder 方法

 connect(xmov,SIGNAL(SetPos(int)),xslider,SLOT(SetPos(int)))

這就是訊號槽的一種好處,當然訊號槽也是處理各類控制項的自訂事件。

5. 及其便捷的樣式設計(像開發web程式一樣設計介面)

可以很容易的做一個圓角邊框,並且有漸層效果,滑鼠移上去還發生變化,可以參考下面的樣式表,qss基本和css類似,包括支援css的選取器,可以通過類名,對象名,和父類名稱來設定。

 

650) this.width=650;" src="https://s1.51cto.com/oss/201711/16/663d2dcb6f8d86db48c649ca4e24301b.gif-wh_500x0-wm_3-wmp_4-s_3489436162.gif" title="12.gif" alt="663d2dcb6f8d86db48c649ca4e24301b.gif-wh_" />

 

 

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相關文章,這篇文章主要做簡介,後面會分塊詳細講解。


更多內容也可以關注我的51cto學院中的視頻課程


更多的資料也可以關注我51cto上的視頻課程

夏老師的課堂 http://edu.51cto.com/lecturer/12016059.html


C++QT5跨平台介面編程原理和實戰大全視頻課程

http://edu.51cto.com/course/11507.html

650) this.width=650;" src="https://s1.51cto.com/oss/201711/16/9e5d75b6fed34e1b86d17307bb5e9309.jpg-wh_500x0-wm_3-wmp_4-s_3655684438.jpg" title="11.jpg" alt="9e5d75b6fed34e1b86d17307bb5e9309.jpg-wh_" />


本文出自 “夏曹俊” 部落格,轉載請與作者聯絡!

為什麼qt成為c++介面編程的第一選擇

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.