C++面向對象課程設計,用哪個圖形界面庫合適?

一代球痞


回答這個問題之前,我們先來看看常用的C++界面庫都有哪些?


1、Qt

放在第一位,也是重點推薦的,絕對是提高生產力,解放雙手的好幫手。文檔齊全,原生態跨平臺支持,API相比MFC不知道優雅了多少倍。目前版本的QSS可以讓你很方便的用C++來寫界面。盛行國產化的今天,相信Qt的市場會進一步加大。

下圖是使用Qt內置的QSS繪製的一個界面換膚效果圖,還是很不錯的(PS:作品來源於CSDN,博主:一去丶二三里,如有侵權,請隨時聯繫)。

2、MFC

上個世紀的產物,目前就連親爹微軟也已經將他拋棄了,行業更有MFC==沒飯吃一說。不過其在軍工、電力等一些特有行業還是有一定的市場佔有率。自用的話,創建基於對話框模式的下項目,作一些不涉及複雜界面效果的小工具還是很方面的。

比如下圖是使用MFC拖拽的一個界面圖。

3、第三方界面庫,比如Duilib、BCG等。

這裡重點介紹下Duilib,一款Windows下免費開源的DirectUI界面庫,由於簡約易擴展的設計以及穩定高效的實現被各大互聯網公司普遍接受,廣泛應用於包括IM、視頻客戶端、股票行情軟件、導航軟件、手機輔助軟件、安全軟件等多個行業的眾多pc客戶端軟件。比如大家每天都在用的「微信」、「盤古越獄工具」、「愛奇藝」等等。

下圖是基於Duilib開發的一款仿360安全衛士的界面效果。

至於缺點呢,也和突出,早期的版本目前作者已經不再維護了,所以或多或少會有一些坑在等著你,目前各大公司都有其自己維護的版本。


總結

在校學生,建議優選Qt,文檔齊全,遇到問題也會很容易的在網絡上找到解決辦法。MFC這種上個世紀的東西還是讓他永久的封存起來吧,至於Duilib等第三方開源庫,文檔實在是太少了,新手不建議選用。


本文為作者“一個程序員的奮鬥史”悟空問答原創文章,未經允許轉載、抄襲必究!

一個程序員的奮鬥史


一般有兩種,一種是MFC,一種是Qt。

MFC編程需要使用Document/View模式以及模板(template),如果不使用的話,編程將變得異常困難。而且,模板(template) 設定了固定的結構,若所需結構乃模板未定義之結構,則編程難已。例如,劃分一區域使顯示兩個視圖(view)於兩個文檔(document)。還有一個經常的問題是:模板(template)創建了視圖(view)卻無法訪問(access)它,文檔(document)要做完所有事情,但是這經常會出現問題。

MFC的根本目的是訪問包裝起來的用C語言寫的windows的API。 這絕非好的面向對象的設計模式,在很多地方,你必須提供一個包含15個成員的C語言的struct,但是其中只有一個與你所期望的相關,或者必須用舊式的參數來調用你的函數。

Qt是一個功能非常完善的c++跨平臺圖形庫,其實與其說圖形庫倒不如說它是一個與MFC類似的應用框架。Qt本身就是使用c++語言實現。

兩者優缺點對比:

消息循環

MFC是事件驅動的架構。要執行任何操作,都必須是對特定的消息作出響應。Windows對應用程序發送的

信息數以千計,遺憾的是,要分清楚這些分繁蕪雜的消息是很困難的,並且關於這方面的文檔並不能很好的解決這些問題。

Qt的消息機制是建立在SIGNAL()發送和SLOT()接受的基礎上的。這個機制是對象間建立聯繫的核心機制。利用SIGNAL()可以傳遞任何的參數。他的功能非常的強大。可以直接大傳遞信號給SLOT(),因此可以清楚的理解要發生的事情。一個類所發送的信號的數量通常非常的小(4或者5),並且文檔也非常的齊全。這讓你感覺到一切盡在掌握之中。SIGNAL/SLOT機制類似於Java中listener機制,不過這種機制更加輕量級,功能更齊全。

創建界面

MFC無法創建大小動態可變的子窗口,必須重新手動修改代碼來改變窗口的位置(這恰好解釋了為什麼windows裡的dialog是不可以改變的)這個問題在軟件進行國際化翻譯的時候更加嚴重,因為許多國家表達相同意思需要更長的詞彙和句子,必須要對每個語言的版本重新修改自己的軟件。

Qt還提供了一個圖形用戶工具,Qt Designer,可以用來幫助建立用戶界面。可以修改所使用的任何控件的屬性。不用將他們放在嚴格的位置,可以通過layout完美的組織他們。這個工具所產生的代碼我們是可以實際上閱讀並且可以理解的。生成的代碼單獨放在一個文件裡,在編程的同時,你可以隨心所欲的多次重新生成用戶界面。

Qt Designer可以讓你完成許多在MFC中不可能完成的任務,比如用預先填好的生成listview,在每個tab上用不同的view來使用tab 控制。

Qt還提供了一個圖形用戶工具,Qt Designer,可以用來幫助建立用戶界面。可以修改所使用的任何控件的屬性。不用將他們放在嚴格的位置,可以通過layout完美的組織他們。這個工具所產生的代碼我們是可以實際上閱讀並且可以理解的。生成的代碼單獨放在一個文件裡,在編程的同時,你可以隨心所欲的多次重新生成用戶界面。

Qt Designer可以讓你完成許多在MFC中不可能完成的任務,比如用預先填好的生成listview,在每個tab上用不同的view來使用tab 控制。

使用MFC,一部分開發過程要依靠“resources”,在很多的案例中開發者必須使用他們。這樣會導致如下的後果:

出了Visual Studio,你很難使用其他的工具來完成開發。

資源編輯器僅有有限的功能,比如:通過Dialog編輯器不可能改變所有的屬性,一些屬性可以改變,另一些屬性則不可能改變。(譯者注:下面還有兩條陳述MFC缺點的實例,但我感覺這些已經夠說明問題了,暫時刪節不譯)

然而Qt並沒有資源的概念,這就解決了以上所提到的問題。Qt提供了一個腳本使得能將編入你的代碼。對於界面設計,Qt Designer則創建了可讀的代碼。

價格

一旦你購買了Visual Studio,你將免費的獲得MFC SDK。

Qt在Unix上是可以免費獲得其遵守GPL版權的版本(譯者注:現在在windows 上也可以免費獲得其GPL版本)。如果要開發不公開源代碼的軟件,必須購買Qt的授權。在特定平臺下,每個開發者購買一個永久性授權,並獲得一年的技術支持。(譯者注:後面關於購買價格等問題刪去,因為價格不固定,如果有疑問請到官方網站查詢價格)

發佈

在發佈基於MFC的軟件時,必須依靠存在於客戶電腦上的MFC。但是這是不安全的,同樣是MFC42.dll,可以基於相同的庫得到3個不同的版本。通常,需要檢查是否擁有正確的MFC42.dll版本,如果不是,就升級它。但是升級MFC42.dll會改變很多軟件的行為。這讓我感到很不舒服,如果用戶在安裝我的軟件以後導致其機器死機該怎麼辦?

Qt則沒有這個風險,因為Qt壓根就沒有“升級整個系統”這個概念。

感覺MFC相比QT的確有很多的不足,但MFC的用戶群巨大。Qt要想短時間撼動MFC的地位,還是有點難度的。


小羊看科技


C++標準中並沒有包含圖形界面庫(GUI),這也使得C++開發圖形化界面需要依賴於第三方的庫。以下是常用的幾個圖形界面庫,供大家參考借鑑。

1)Qt

Qt是一種跨平臺的應用程序和UI框架

它包括一種跨平臺的類庫,集成開發工具和跨平臺的IDE,使用Qt,你可以編寫基於Web的應用程序,並且通過許多的桌面和應用程序來部署它們,而無需重寫代碼。

2)Wx Widgets

wxWidgets是一個C++庫,主要是讓開發者為Windows,OS X,Linux和UNIX在32-bit和64-bit的體系下開發應用程序,同時也為移動的平臺包括像Windows Mobile,iPhone SDK和嵌入式的GTK+。

3) EasyX

EasyX 是針對 C++ 的圖形庫,可以幫助 C 語言初學者快速上手圖形和遊戲編程。

比如,可以用 VC + EasyX 很快的用幾何圖形畫一個房子,或者一輛移動的小車,可以編寫俄羅斯方塊、貪吃蛇、黑白棋等小遊戲,可以練習圖形學的各種算法,等等。

4)FLTK

FLTK(發音“Fulltick”)是UNIX/Linux(X11),Microsoft Windows和MacosX上一套跨平臺的C++ GUI工具包。FLTK提供現代圖形用戶界面的功能而沒有膨脹(諤諤...這個地方蛋疼了,路過的知道的說一下,原話:FLTK provides modern GUI functionality without the bloat),並且支持3D圖形,依靠OpenGL和它內置的GLUT仿真。FLTK被設計成小巧和模塊化足以實現靜態鏈接,但作為一個共享庫其做工很精細。FLTK也包括一個傑出的UI生成器,叫做FLUID,它能夠在秒內創建應用程序。

5) GTKMM

gtkmm 是官方的GTK+的C++接口,GTK+是當前最流行的圖形界面開發庫之一。使用gtkmm,你不但可以從代碼還可以用Glade來創建用戶界面。不過需要libglademm的配合。gtkmm是自由軟件,遵循LGPL(GNU Library General Public License)。





鼴鼠科技


Qt


Na小星


在Windows平臺一般是用VC中的MFC,還有一個是QT,初學者建議先去學mfc,等過段時間再去學qt就會覺得比較輕鬆。


程序員幫幫忙


qt吧 其實以前有c++ buider 挺好的


用戶263521714453


其實你們不知道還有個叫c++ builder的東西,我現在也還在用。


Tsechung


要看選擇哪個平臺,基本來說可以選擇的有Qt(跨平臺)、wxWidgets(跨平臺)、GTK(Linux平臺)等等,具體選擇建議根據實際需求。


分享到:


相關文章: