轉帖|對比評測|編輯:龔雪|2016-04-06 09:16:35.000|閱讀 1137 次
概述:MFC(微軟基礎類庫)是專門為windows設計的一個用于開發圖形用戶界面的類庫;Qt可以運行在Windows、Mac OSX、Unix、還有像Sharp Zaurus這類嵌入式系統中,Qt是完全面向對象的。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
MFC(微軟基礎類庫)是專門為windows設計的一個用于開發圖形用戶界面的類庫。MFC或多或少使用了面向對象的方法包裝了Win32的API,正因如此,這些API有時是C++,有時是C,甚至是C和C++的混合體。
Qt這個C++的圖形庫由Trolltech在1994年左右開發。它可以運行在Windows、Mac OSX、Unix、還有像Sharp Zaurus這類嵌入式系統中,Qt是完全面向對象的。Document/View modelMFC編程需要使用Document/View模式以及模板(template),如果不使用的話,編程將變得異常困難。而且模板(template)設定了固定的結構,若所需結構乃模板未定義的結構,則編程難。例如,劃分一區域使顯示兩個視圖(view)于兩個文檔(document)。還有一個經常的問題是:模板(template)創建了視圖(view)卻無法訪問(access)它,文檔(document)要做完所有事情,但是這經常會出現問題。 這種數據和視圖分開的設計模式也是一種不錯的模式,不應該成為否定MFC的理由。Qt不強制使用任何設計模式,如果你認為恰當,使用Document/view沒有任何問題,不使用也沒有任何問題。
歸根結底,Qt和MFC的差異在于其設計的差異。MFC的根本目的是訪問包裝起來的用C語言寫的windows的API,這絕非好的面向對象的設計模式。在很多地方,你必須提供一個包含15個成員的C語言的struct,但是其中只有一個與你所期望的相關,或者必須用舊式的參數來調用你的函數。MFC還有許多讓人摸不著頭腦的地方,函數名沒有任何的連續性。比如,如果你創建了一個graphical類,直到調用了creat()以后該類才會被創建。然而對dialogs,必須要等到OnInitDialog()才能創建這個對象。奇怪的是到了views,創建該類的函數名竟然成了OnInitUpdate()!你自己創建一個類并用他們的方式調用它,然后程序崩潰了。
比如說有一個dialog包含CEdit控件,如果沒有調用DoModal()你就不能使用GetWindowText(),否則將會莫名其妙的失敗。總之,MFC充滿了丈二和尚摸不著頭腦的事情,并且,這種錯誤很難調試。 誠然MFC是為了封裝Window API,用MFC比Winows API會簡單些,但確實有些函數的調用時機、先后順序,如果不是用過一段時間,確實可能因此導致問題。
Qt恰恰相反,它的架構明顯是經過精心設計的面向對象的。Qt因此在命名、繼承、類的組織等方面保持了優秀的一致性。你只需要提供唯一一個方法的參數,僅此一個。在不同的類中調用方式也是有很強的連貫性,返回值也很有邏輯性。所有一切達到了簡單和強大的和諧統一。一旦你使用了其中一個類,其他的類也就觸類旁通,因為他們是一致的。在Qt中可以利用Edit控件,用C++創建類的方法來創建自己的QLineEdit。永遠可以馬上訪問任何的方法,不管它是顯示還是隱藏。在這里沒有迷局,一切都按照你認為的簡單的方式來運作。
MFC是事件驅動的架構,要執行任何操作,都必須是對特定的消息作出響應。Windows對應用程序發送的信息數以千計,遺憾的是,要分清楚這些分繁蕪雜的消息是很困難的,并且關于這方面的文檔并不能很好的解決這些問題。
Qt的消息機制是建立在SIGNAL()發送和SLOT()接受的基礎上的,這個機制是對象間建立聯系的核心機制。利用SIGNAL()可以傳遞任何的參數。它的功能非常的強大,可以直接傳遞信號給SLOT(),因此可以清楚的理解要發生的事情。一個類所發送信號的數量通常非常的小(4或者5),并且文檔也非常的齊全,這讓你感覺到一切盡在掌握之中。SIGNAL/SLOT機制類似于Java中listener機制,不過這種機制更加輕量級、功能更齊全。
MFC無法創建大小動態可變的子窗口 ,必須重新手動修改代碼來改變窗口的位置(這恰好解釋了為什么windows里的dialog是不可以改變的),這個問題在軟件進行國際化翻譯的時候更加嚴重,因為許多國家表達相同意思需要更長的詞匯和句子,必須要對每個語言的版本重新修改自己的軟件。
在Qt中,任何東西都可以手動的敲出來,因為它很簡單。為了得到一個button,可以這樣寫:button = new PushButton( "buttonName", MyParentName );如果想在按下某個按鈕以后調用某斷代碼的執行,可以這樣寫:connect( button, SIGNAL( clicked() ), qApp, SLOT( action() ) );Qt擁有非常簡單而又不失強大的layout機制,以至于不使用它就是在浪費時間了。
Qt還提供了一個圖形用戶工具:Qt Designer,它可以用來幫助建立用戶界面、可以修改所使用的任何控件的屬性。不用將它們放在嚴格的位置,就可以通過layout完美的組織他們。這個工具所產生的代碼是可以實際閱讀并理解的,生成的代碼單獨放在一個文件里,在編程的同時,你可以隨心所欲的多次重新生成用戶界面。
Qt Designer可以讓你完成許多在MFC中不可能完成的任務,比如用預先填好的生成listview、在每個tab上用不同的view來使用tab控制。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都控件網