淺析 Qt 界面庫
Qt 界面庫是本文主要講述的內容,下面一段話來自壇子里。對于QT,其實也是一個不錯的選擇。linux,C++寫界面基本上都是用它。這個東西是跨平臺的。手機上也有。
問題就是這個東西到底免費還是不免費誰的不知道(linux上是免費的,我的是windows)。他又插件直接集成進VS2005,2008,然后想MFC那樣花界面。如果熟悉,開發效率跟MFC是一樣的。網上我以前找過,還是有不少的,畢竟這個東西也很久之前就開發出來了。 問題是這個很難招到這樣的人才。得靠自己去培養。
對于QT的描述,我不認同仁兄的看法。
首先,QT有商業版本和開源版本。被NOKIA收購后,開源版本使用的協議是LGPL,就是說,你把QT當作是一個庫,你不修改庫只是調用庫的話,是免費的,而且你的代碼不需要開源,只有針對QT庫的改動部分才需要開源,所以,LGPL這個協議是很適合開源庫的商業用途的。
其次,使用QT開發標準GUI界面,比MFC的開發效率至少高一個數量級。因為QT庫比MFC龐大很多,而且QT的許多機制比MFC先進很多。如果認為QT僅僅是一個跨平臺界面庫,那就小看它了。我要說的是,它不但是一個通用的跨平臺的面向對象的應用程序接口庫(包括GUI、數據庫、網絡、多線程、XML、數據容器和算法等,常用的編程資源都有封裝,就是說,這些都可以跨平臺,而不僅僅是界面),更是一種C++語言的擴展,一種編程平臺和應用程序框架。
信號和槽的機制簡化了對象之間的通信,比MFC的消息映射直觀多了;界面的布局管理機制使開發人員可以很輕松地編出優雅的窗體;界面語言翻譯機制也很方便實用;QObject容器管理可以看到Qt在內存管理方面的努力;擴展的foreach循環結構也向現代語言靠攏;QT在界面層多封裝了一層QStyle,開發者甚至可以使用CSS定制出一套界面來……如果僅僅是開發標準的GUI(使用通用的控件),開發效率會很高,接近于.NET窗口編程。
第三,QT自帶的控件庫比MFC豐富多了,而且還有很多擴展庫和第三方的控件庫,同樣是LGPL開源的。QT提供了VS各個版本的插件,因此在VS上開發QT程序比使用其它UI庫方便很多。
第四,運行效率問題。QT使用了很多高級機制,使它的效率確實比MFC。比如,QT在界面層多封裝了一層QT樣式,在運行時可以使用不同風格的樣式,即類似于換膚功能(不同的是,它由QT框架直接提供)。所以執行效率比不上原生操作系統的界面庫(如MFC、wxWidgets等)。但是,QT界面庫的效率還是比WPF、.Net、Java高幾個數量級的,畢竟QT開發出來的是機器碼,不是虛擬機或解釋程序可以比擬的。
第五,程序大小的問題。QT庫的確很大,最基本的兩個動態庫文件,QtCore4.dll有2M多,QtGui4.dll有7M多(4.6.2),所以在發布軟件的時候,還要帶上這些動態庫文件。當然,使用QT靜態鏈接庫要好一點。至于使用靜態鏈接好,還是使用動態鏈接好,這里我不加討論,沒有***,只有最適合的(MFC也有這個問題)。
第六,跨平臺問題。跨平臺的確很誘人,尤其是做嵌入式設備的。樓主的項目是什么我不了解,因此這里不妄加評論跨平臺問題。
第七,人才問題和培訓問題。在中國,MFC/Win32開發人員是最多的(不談虛擬機平臺編程),因為學校學的就是這個。而會QT的真的很少。不過鑒于Nokia的大力支持和開源為LGPL的手段,我相信會QT的會越來越多。QT的學習也不會想像中的難,畢竟它只是一個庫(應用程序框架)而已,上手不會太難,不會比MFC久。
第八,幫助資源問題。QT的資源很豐富,其自帶的Assistant相當于微軟的MSDN,各個接口和編輯元素的說明都很詳細,不過都是英文的,跟MFC一樣。網上QT社區也不少。畢竟,QT比MFC,甚至比Windows還年長!
***,聲明一下,我不是QT的槍手。程序員無槍手。他們都很純樸。我們公司仍然在使用MFC,但是嵌入式設備裝上一個正版Windows XPE,畢竟太奢侈了。另外用MFC做界面真的很痛苦,我們公司的好幾個項目都在向QT轉型。在界面庫選型上,我們也花了不少時間,從開源的wxWidgets,到商業的一些大大小小的界面庫,***選中QT。