當前位置:首頁 » 股票漲停 » wxwigets股票軟體

wxwigets股票軟體

發布時間: 2021-07-15 12:20:42

『壹』 wxwidgets 下載

我編程,我快樂!——人人都能學好編程。

| 首頁 | 教程 | 輔助教程 | 關於作者 | 本站軟體 | 論壇 | CSDN博客 | 幫助 |

--------------------------------------------------------------------------------

白話C++
2.2. 安裝wxWidgets

多數應用軟體,通常需要一個界面與使用者進行交互。典型的交互方式可以分成三種:

純文字界面
也稱為「控制台」應用。此類應用通過以「一問一答」的形式在屏幕上打出提問的文字,然後等待用戶輸入後,程序得以繼續運行。 這類交互形式稱不上友好,但實現起來簡單。在我們學習C++語法的一個很長的時期,我們所寫的程序,多數採用此類形式。
圖形用戶界面
通過「對話框」、「菜單」、「按鈕」等典型的圖形元素所提供的用戶界面。即「圖形用戶界面/Graphical user interface」,簡稱為GUI。該形式下,用戶通過滑鼠或鍵盤操作,選擇所需的功能。 我們常用Office軟體、QQ聊天軟體、以及Windows操作系統本身,都是典型的GUI程序。
瀏覽器界面
瀏覽器界面是GUI的一種特定應用。它將程序分為後台服務和前台展示兩部分。後台服務主要實現程序的業務邏輯,以及產生界面腳本(通常是HTML),真正的界面展現與交互工作完全交給第三方的瀏覽器(比如IE,或Firefox)去完成。 當我們上網瀏覽新聞時,就是在使用此類應用。
本書前面的一大部分內容,採用「純文字界面」作為范常式序主要採用界面方式。此安排自然是為了避免讀者一開始就陷入復雜的GUI界面設計的「泥潭」之中。然而,與大多數純粹的C++語言教程止步於此不同,如果編寫(跨平台)的「圖形用戶界面」,也是本書的主要教學內容。

C++的GUI程序庫,同樣充滿很多選擇。一些非開源產品多數僅限於某一平台。wxWidgets是同時符合「開源」、「成熟」、「跨平台」,並且支持各平台「原生界面」的GUI庫中的佼佼者。這里的「原生界面」是指,在A系統下,其生成的界面元素,就和A系統的本地界面風格一致,這里的A,可以指代Windows XP、也可以指代Linux下某一圖形界面。

wxWidgets的主要特點如下:

開源
跨平台:Windows、Mac OS X、GTK+、X11、Motif、WinCE。
既支持原生界面,也支持統一風格界面。
不僅僅是圖形界面庫:集成提供了包括文件操作、目錄操作、多線程、網路通訊、OpenGL(3D)等等功能庫。
支持不同的庫鏈接形式:靜態鏈接,動態鏈接庫,其中後者還可以支持編譯成單一動態庫,或多個小動態庫的形式。
支持UNICODE:編譯時,可以編譯出UNICODE或非UNICODE兩種版本,本書採用UNICODE,以方便編程上對漢字的操作。
發展成熟:有較長的發展歷史(起源於1992年),業界有許多基於wxWidgets的成熟應用
學習資源豐富:網路上的可以找到較多的資源。
與Code::Blocks結合緊密:C::B本身正是採用wxWidgets實現跨平台的圖形用戶界面。另外C::B內置了使用wxWidgets的可視界面設計工具。
支持多種編譯器:包括本書採用的開源gcc/g++編譯器,也包括Visual C++等商業編譯器。
本書配套光碟提供了wxWidgets 2.8.8 版本的安裝程序,以及四種編譯庫。您可以通過查看光碟中對應的說明文件,實現快速安裝。

如果您需要更新版本的wxWidgets,或者您只是想學習其編譯過程,那麼請繼續閱讀下述內容。

2.2.1. 准備

請通過本小節末尾的「相關網站」鏈接,上網下載wxWidgets的最新穩定版本。請注意選擇為for windows版本。

下載得到的,應是一個可執行的安裝程序。與Code::Blocks的安裝類似,建議將其安裝某個驅動器的根目錄下,比如:E:\ wxWidgets-2.8.8 目錄下(尾部數字以您所使用的wxWidgets版本為准)。

當然,由於本書將指導您安裝多個C++擴展庫,因此,如果您願意建立一個新文件夾,用於作為各個C++擴展庫的統一的父文件夾,的確是個好主意。

2.2.2. 編譯

上一步安裝wxWidgets,僅得到源代碼文件及一些說明。我們還需要將其中的源代碼編譯成「庫」文件。此類「庫」有很多種形式,但其實都可以稱為「預編譯庫」。意思是:它們已經編譯好了,你直接拿去用吧。

我們先簡單地了解一下「動態、靜態」及「調試、發行」的區別。

「庫」通常包含很多功能代碼,但它們本身並不能直接運行,而是准備提供給應用程序使用, 「動態鏈接」和「靜態鏈接」代表程序如何找到及使用庫功能的兩種不同方法。

「靜態鏈接」是指,直接將庫文件和程序文件合成一個大文件,在合並過程中,完成對庫文件各個功能的定位。這個事情發生程序編譯的過程。

「動態鏈接」與此相反,庫文件和程序文件各自獨立存在,程序在運行時,才去庫文件找相關的功能。

完全使用「靜態鏈接」,我們可能會得到一個「胖胖」的程序,直接發給用戶使用就可以了。使用「動態鏈接」,我們可能需要分發給你的用戶多個文件(程序和各個庫文件)。不小心弄丟了哪個文件,用戶們就要抱怨你的軟體「跑」不起來了。

「調試版」和「發行版」就和鏈接技術無關了。前者表示,二者的區別在於:前者含有調試信息,而後者沒有。有調試信息有利於我們糾出程序中的錯誤,不過既然它的含有額外的信息,所以這樣的庫肯定「胖」了不少。如果覺得錯誤糾得差不多了,我們就可以改用相對「苗條」的發行版。

有關「庫」的詳細知識,我們留在第四章講。今天我們將把wxWidgets編譯譯成四種形式:

動態鏈接庫 + 調試版
動態鏈接庫 + 發行版
靜態鏈接庫 + 調試版
靜態鏈接庫 + 發行版
另外,wxWidgets的編譯,還可以區分「UNICODE」及「非 UNICODE」兩種式。在多數場合下,「UNICODE」可以對漢字及國際化有較方便的支持。因此以上四種組合,我們全部都加上相同「UNICODE」選項。當然, 「非UNICODE」選項倒也不是一無是處,以後我們也會用到。

正式開始編譯之前,必須確保已經在電腦上正確安裝好mingw32環境,如果您不在確信,請使用2.1.6.1小節中提及的方法進行檢測。

靜態鏈接(調試版)
步驟1:打開「開始」菜單:「所有程序→附件→記事本」程序。用它打開 wxWidgets安裝目錄下,子目錄「build\msw\」下面的「config.gcc」文件。

步驟2:找到以下內容,並確保將等號(:=)後面的值如下面加粗內容所示。另外其它未指部分的內容,請保持不變。

步驟3:請確認保存了本步的修改成果,再繼續下一步。

# What type of library to build? [0,1]
SHARED := 1

# Compile Unicode build of wxWidgets? [0,1]
UNICODE := 1

# Type of compiled binaries [debug,release]
BUILD := debug

步驟4:SHARED 為 0表示要編譯的是靜態庫,而不是動態庫(共享庫);

UNICODE為1,表示要編譯成UNICODE版本,這一項在本次編譯過程中始終為1。

BUILD為debug,表示要編譯成含有調試信息的版本。

步驟5:打開「開始」菜單,選擇「運行」,輸入cmd,進入控制台窗口,然後在其內通過cd命令,切換到wxWidgets安裝目錄下的「build\msw」路徑。比如您把wxWidgets 安裝在「E:\wxWidgets-2.8.8」,則過程如下:

E: (回車)

cd wxWidgets-2.8.8 (回車)

cd build\msw (回車)

步驟6:在第3步的控制台中,繼續輸入以下命令:

mingw32-make.exe -f makefile.gcc (回車)

步驟7:這將開始一段長約30分鍾的編譯過程(視你的機器配置而定)。

靜態鏈接(發行版)
編譯過程和前一版本主要差別在於「config.gcc」文件的修改內容:

# What type of library to build? [0,1]
SHARED := 0

# Compile Unicode build of wxWidgets? [0,1]
UNICODE := 1

# Type of compiled binaries [debug,release]
BUILD := release

其它操作方法不變。

動態鏈接(調試版)
編譯過程和前一版本主要差別在於「config.gcc」文件的修改內容:

# What type of library to build? [0,1]
SHARED := 1

# Compile Unicode build of wxWidgets? [0,1]
UNICODE := 1

# Type of compiled binaries [debug,release]
BUILD := debug

其它操作方法不變。

動態鏈接(發行版)
編譯過程和前一版本主要差別在於「config.gcc」文件的修改內容:

# What type of library to build? [0,1]
SHARED := 1

# Compile Unicode build of wxWidgets? [0,1]
UNICODE := 1

# Type of compiled binaries [debug,release]
BUILD := release

其它操作方法不變。

2.2.3. 結束

這是一次漫長的編譯過程,至此,我們完成了四個版本的wxWidgets庫的編譯。它是我們編寫圖形用戶界面基礎。

為了確保大家盡量順利地完成編譯,我們在「config.gcc」僅選擇了最基本的編譯選項。因此一些強大wxWidgets功能模塊沒有被編譯成庫,比如前面提到的非Unicode版,另外沒有支持OpenGL、OBDC等功能。後面需要時,我們將會加上,並且令大家放心的是,這並不會帶來又一次wxWidgets漫長完全編譯。

〖小提示〗:程序員,起來走走……

每次30分鍾的編譯過程,漫長的等待中,我猜到您不耐煩得站起來四處走動。走動其實健康有益。然而,在程序員的生涯中,我們更多面臨的,可能是無數個3分鍾,甚至是30秒的等待,這時,你是否記得提醒自己也要常常起來走動走動?

Code::Blocks專門提供一個插件,用於提醒程序員注意休息,很有興趣?請在休息之後繼續我們的白話之旅。

編譯過程中會產生大量的中間臨時文件。請進入wxWidgets文件夾內的「build」子文件夾,搜索 「*.o」文件(確保選中「搜索子文件夾」選項):約有3千多個中間文件,全部刪除,可以騰出1G多的空間。(Windows下多數編譯器會生產擴展名為「.obj」的文件,但mingw32-g++產生的為「.o」文件。)

編譯完成後,所有靜態鏈接庫位於wxWidgets安裝目錄下的「lib\gcc_lib」子目錄。而動態鏈接庫位於 「lib\gcc_dll」子目錄。

仔細觀察,會發現庫文件名稱中,有不少帶有「ud」字母的文件,其中『d』表示「debug」,即調試版本 ,不帶『d』的通常是「release」版本。

『u』表示「Unicode」,即支持Unicode編碼。雖然我們這一次編譯的全部採用「Unicode」選項,但還是存在一些文件並不帶『u』字母,那是因為這些庫並不涉及到字元串的國際化處理,所以不需要考慮編碼,比如與Jpeg圖形功能有關的庫。

靜態庫文件
libwxbase28u.a
libwxbase28ud.a libwxbase28ud_net.a libwxbase28ud_xml.a
libwxbase28u_net.a libwxbase28u_xml.a libwxexpat.a
libwxexpatd.a libwxjpeg.a libwxjpegd.a
libwxmsw28ud_adv.a libwxmsw28ud_aui.a libwxmsw28ud_core.a
libwxmsw28ud_html.a libwxmsw28ud_media.a libwxmsw28ud_richtext.a
libwxmsw28ud_xrc.a libwxmsw28u_adv.a libwxmsw28u_aui.a
libwxmsw28u_core.a libwxmsw28u_html.a libwxmsw28u_media.a
libwxmsw28u_richtext.a libwxmsw28u_xrc.a libwxpng.a
libwxpngd.a libwxregexu.a libwxregexud.a
libwxtiff.a libwxtiffd.a libwxzlib.a
libwxzlibd.a

動態庫文件
wxbase28ud_gcc_custom.dll wxbase28ud_net_gcc_custom.dll
wxbase28ud_xml_gcc_custom.dll wxbase28u_gcc_custom.dll
wxbase28u_net_gcc_custom.dll wxbase28u_xml_gcc_custom.dll
wxmsw28ud_adv_gcc_custom.dll wxmsw28ud_aui_gcc_custom.dll
wxmsw28ud_core_gcc_custom.dll wxmsw28ud_html_gcc_custom.dll
wxmsw28ud_media_gcc_custom.dll wxmsw28ud_richtext_gcc_custom.dll
wxmsw28ud_xrc_gcc_custom.dll wxmsw28u_adv_gcc_custom.dll
wxmsw28u_aui_gcc_custom.dll wxmsw28u_core_gcc_custom.dll
wxmsw28u_html_gcc_custom.dll wxmsw28u_media_gcc_custom.dll
wxmsw28u_richtext_gcc_custom.dll wxmsw28u_xrc_gcc_custom.dll

在gcc_dll目錄下,除了擴展名為「.dll」的動態鏈接庫以外,還存在大量的擴展為「.a」的文件,稱為「導入庫/Import library」,為了節省篇幅,上表未加列出。

「導入庫」在編譯時向應用程序提供信息,以輔助應用程序在運行時,定位具體某一功能在DLL文件中的入口。也就是說,今後編譯程序時,將用到它們,但它們不必隨同程序一起發行。

2.2.4. 相關網址

wxWidgets 官方網站:www.wxWidgets.org

wxWidgets擴展代碼:www.wxCode.com

『貳』 Qt和wxWidgets哪個好

wxWidgets是開源的, qt不是開源的!
從這個角度思考, 就像windows 和 linux 關系, 你覺得windows和linux誰好? 使用windows的人多,很大的原因是商業營銷行為導致的.

我用wxWidgets有多年了,所以給你描述一下關於wxWidgets, 其他人少提及的東西.

wxWidgets其實非常不錯, 桌面應用完全能夠勝任,效率非常高,內存以及cpu佔用很可觀,在windows下敢和MFC開發的軟體比,在mac os下敢和object-c開發的軟體比!

而且並不是說界面和控制項的外觀就被固定為操作系統本地化的外觀, 你完全可以將界面或者控制項元素做成任意樣式和形狀,實現不同平台UI風格的統一化,甚至可以製作多套皮膚,然後在win7,xp,mac下外觀和用戶體驗一個樣.

更主要的是,他的源代碼是完全開放的. 高階運用的時候完全可以將某個控制項類繼承下來, 由於他沒有private屬性,所以他裡面的函數和變數你全都能繼承下來,然後照著源代碼進行修改和調整,最後變成自己針對性的控制項. 反正, 在UI上沒他辦不到的. 另外,他的界面控制項的類是完全指針安全的, 你隨便new, 然後不用管, 用完了他自己會回收,完全不用delete,當然也別delete,不然麻煩了.

其他的功能其實他都有提供,比如網路庫,容器,OpenGL等等, 如果覺得不理想,比如資料庫,可以用www.hnne.com xsqlite, 線程什麼的可以用std的線程或者boost的線程,網路如果覺得他的事件機制反應慢, 可以用boost::asio.

社區不活躍,但是你要是在上面提問, 馬上就會得到回應(即便是美國的深夜), 如果是bug, 會有人直接聯系原作者,非常快的就進行改正,並郵寄通知你,然後發到svn上進行更新.不過主要是英語的響應快, 中文的幾乎沒人搭理.

bug是存在的, 比較冷的功能和運用可能會有bug, 可以給官方提交,一般一天左右就可以得到響應, 如果不願意, 反正有源代碼, 跟蹤一下, 繼承下來改改就可以了,wxWidgets是開源的, 而且裡面的函數和變數只用public和protected,沒有用private, 換句話說, 就是源代碼中的所有函數和變數都是可以獲取和使用的. 不過,一般的運用是很難碰到bug的. 誰敢說qt沒有bug? 遇到qt的bug你找他, 你是付費用戶嗎?

不過, 移動運用確實是他的短板.

『叄』 有沒有在win10安裝wxwidgets成功的

可以騰訊電腦管家幫助安裝 打開騰訊電腦管家——工具箱——軟體管理 軟體管理是電腦管家根據當前最新最流行的軟體下載情況,向用戶推薦的熱門軟體。每款軟體都經過電腦管家運營團隊人工測試整理,確保安全可靠,用戶可以放心下載。

『肆』 如何使用 wxwidgets開發界面

wxWidgets是一個跨平台的軟體開發包。它誕生於1992年,最初的名子是wxWindows,但由於Microsoft的抗議,在2004年改名為wxWidgets。它最初是被設計成跨平台的GUI軟體開發包,但後來隨著越來越多的人參與進來,為wxWidgets加入了許多非GUI的功能,如多線程(MultiThread)、網路(Network)等。並且從最初的只支持C++語言,逐漸發展成為支持數種語言(如Python、Perl、C#、Basic等)。因此,現在的wxWidgets已經不再是單純的跨平台的GUI軟體開發包,而是一個可以支持多種操作系統平台的能夠在多種語言中使用的通用跨平台軟體開發包。


由於wxWidgets最開始是為C++而設計的,因此,本文主要討論了wxWidgets在C++中的使用。


為什麼選擇wxWidgets?


目前支持C++的軟體開發包非常多,比較有名的除了wxWidgets外,還有一些其它的軟體開發包,如MFC、QT、ACE等。即然有這么多開發包,那麼我們為什麼要使用wxWidgets呢?在給出答案之前,讓我們首先來看一看上述的三種軟體開發包的特性。


1. MFC


MFC是Microsoft提供的軟體開發包。MFC雖然十分強大,但它只能運行在Windows下運行。而且它是收費的。


2. QT


QT是由Trolltech 公司開發的一套跨平台軟體開發包。它和wxWidgets類似,但是QT只在linux下免費,而在Windows或Unix下使用QT要向Trolltech公司支付版權費。


3. ACE


ACE雖然是免費開源的,但是它沒有提供GUI功能。


從以上三個軟體開發包可以看出,它們雖然有各自的優勢,但是它們或多或少地都會使開發受到限制。而使用wxWidgets將不會有以上所述的問題。wxWidgets和MFC、QT、 ACE的特性對比如表1所示。

註:其中免費中的「是/否」代表QT在linux平台上的Free Edition是免費的,而在windows和unix下使用QT是收費的。而開源中的「是/否」代表QT有一個基於GPL的開源版本,但要進行商業開發,需要使用它的商業版本。


使用wxWidgets編寫程序


學習一種編程語言的最好方法就是用它去編寫程序,學習wxWidgets也不例外。由於wxWidgets的主要功能是實現跨平台的GUI,因此,本文主要從GUI入手,討論wxWidgets在C++中如何編寫跨平台的應用程序


1. 應用程序類的建立


使用wxWidgets建立系統需要一個類來描述整個應用程序。這個類必須從wxApp類繼承。


class MyApp : public wxApp //應用程序類

{

public:

virtual bool OnInit(); // 在應用程序啟動時調用,如果返回false,退出應用程序

};

這個類只覆蓋了wxApp的一個虛方法OnInit。可以用這個方法在程序啟動時做一些驗證,如果驗證失敗,可以通過返回false退出應用程序。當然,由於這個函數是應用程序的入口點,所以建立主窗體的工作要在這個函數中完成。


2. 建立窗體類


wxWidgets中關於窗體的類很多,如果要建立一般窗體的話,可以從wxFrame繼承。

class MyFrame : public wxFrame //窗體類

{

public:

MyFrame(const wxString& title); // 窗體的構造函數

};

3. 向窗體中加入控制項


在本文中向這個窗體加入了一個菜單條(Menu Bar)、一個狀態條、一個Panel和一個按鈕。一般我們會在主窗體的構造函數中加入這些控制項。


MyFrame::MyFrame(const wxString& title) : wxFrame(NULL, wxID_ANY, title)

{

wxMenu *fileMenu = new wxMenu; // 建立「文件」菜單

wxMenu *helpMenu = new wxMenu; // 建立「幫助」菜單

// 向菜單中添加子項

helpMenu->Append(wxID_ABOUT, _T("關於"tF1"), _T("顯示關於對話框"));

fileMenu->Append(wxID_EXIT, _T("退出"tAlt-X"), _T("退出應用程序"));

wxMenuBar *menuBar = new wxMenuBar(); // 建立一個菜單條

menuBar->Append(fileMenu, _T("文件")); //將「文件」菜單加入到菜單條

menuBar->Append(helpMenu, _T("幫助")); //將「幫助」菜單加入到菜單條

SetMenuBar(menuBar); //將菜單條放到窗體上

wxPanel *panel = new wxPanel(this); //建立一個Panel

wxButton *button = new wxButton(panel, wxID_ABOUT, "關於", wxPoint(20, 20), wxSize(50, 30)); //建立一個Button

CreateStatusBar(2); //建立一個兩欄的狀態欄

SetStatusText(_T("歡迎使用wxWidgets!")); //設置狀態欄的文本

在數組sample_xpm中描述了sample.ico的屬性和圖標本身。如X代表紅色; o代表黃色等。然後在源程序中通過include 「sample.xpm」引用這個資源文件。要想從這個資源文件中裝載圖標。可使用SetIcon(wxICON(sample)); wxICON讀取資源文件,而SetIcon將這個圖標設置為frame的標題欄圖標。要想將ico文件轉換為這種資源文件,可使用一個免費軟體XnView進行轉換。


5. 顯示主窗體


顯示主窗體非常簡單,只需要將上面建立的MyFrame類實例化,並調用wxFrame的Show方法顯示即可。這些代碼可以寫在MyApp類的OnInit方法中。


bool MyApp::OnInit()

{

//建立MyFrame類的實例

MyFrame *frame = new MyFrame(_T("第一個wxWidgets程序"));

frame->Show(true); //顯示主窗體

return true; //必須返回true,否則應用程序將退出

}

在以上代碼中Show方法有一個參數,如果為true,則以模式窗口的形式顯示,否則以非模式窗口的形式顯示。


6. 向窗體中加入事件


到目前為止,這個程序的界面已經完成了,但還未響應任何事件,下面就詳細闡述如何向這個應用程序中加入事件代碼。

對於事件來說,一般都會由兩部分組成。


(1)調用事件部分


當程序發生某個動作時,如點擊按鈕;選中某個控制項,可能需要執行一段代碼。而這段代碼一般是由系統負責調用的,也就是說系統通過事件函數指針調用相應的代碼。


(2)事件函數本身


事件函數與普通函數一樣,只不過它是在發生了事件之後,由系統調用的。


在wxWidgets中是通過事件哈希表(Event Hash Table)來進行事件處理的,即將相應的事件函數指針保存在一個哈希表中,然後當事件發生時,從這個哈希表中找到相應的事件函數指針,然後通過函數指針調用函數。在使用事件哈希表之前,必須定義它。由於定義哈希表非常復雜,而且每個需要處理事件的類都需要同樣的代碼,因此,wxWidgets為此定義了一個宏DECLARE_EVENT_TABLE()來定義哈希表。可將這個宏寫在MyFrame類的任何位置。它相當於將以下語句放到了MyFrame類中。


private:

static const wxEventTableEntry sm_eventTableEntries[];

protected:

static const wxEventTable sm_eventTable;

virtual const wxEventTable* GetEventTable() const;

static wxEventHashTable sm_eventHashTable;

virtual wxEventHashTable& GetEventHashTable() const;

其中靜態數組變數sm_eventTableEntries保存了MyFrame類中的所有的事件信息。


上面的代碼聲明了處理事件哈希表的一些方法,即然聲明了,就得實現。由於實現代碼也都一樣,因此,wxWidgets也為實現這些方法定義了一組宏。實現這些方法的宏如下所示。


BEGIN_EVENT_TABLE(MyFrame, wxFrame)

EVT_MENU(wxID_EXIT, MyFrame::OnQuit)

EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)

EVT_BUTTON(wxID_ABOUT, MyFrame::OnAbout)

END_EVENT_TABLE()

其中BEGIN_EVENT_TABLE(…)實現了上面定義的方法,以及初始化了靜態變數sm_eventTable。後面兩個EVT_MENU和一個EVT_BUTTON宏初始化了靜態變數sm_eventTableEntries,即將這兩個事件函數的指針(button和about菜單使用一個事件函數OnAbout)和控制項ID保存在sm_eventTableEntries中,最後的END_EVENT_TABLE()宏做為一個空的事件函數指針賦給了sm_eventTableEntries,這有些象C語言中處理字元串,將最後一個字元賦為』"0』,這樣就可以知道哪是結尾了。

向窗體中加入事件的最後一步是聲明和實現事件函數。在本例中聲明了兩個事件函數。

void OnQuit(wxCommandEvent& event);

void OnAbout(wxCommandEvent& event);

可以將這兩個函數聲明放到MyFrame中的任何位置。下面是它們的實現代碼。


void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))

{

Close(true);

}

void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))

{

wxString msg;

msg.Printf( _T("這是一個關於對話框的例子."n")

_T("歡迎使用 %s"), wxVERSION_STRING);

wxMessageBox(msg, _T("¹關於"), wxOK | wxICON_INFORMATION, this);

}

其中OnQuit函數調用Close(true)關閉MyFrame,由於MyFrame是主窗體,因此,在MyFrame關閉後,應用程序也隨之關閉了。OnAbout使用wxMessageBox函數彈出一個信息對話框。


7. 運行程序


到目前為止,這個程序的代碼已經基本完成了,但是在前面曾說過,MyApp中的OnInit方法在應用程序啟動時執行,那麼是誰調用了OnInit方法呢?答案當然是wxWidgets。wxWidgets為了調用這個方法,提供了一個宏IMPLEMENT_APP(…),這個宏有一個參數,需要將MyApp做為參數傳入。即IMPLEMENT_APP(MyApp)。這個宏相當於一個WinMain函數(和控制台程序的main函數類似),即在WinMain函數中調用了MyApp中的OnInit函數。在加入這個宏後,就可使用一個C++編譯器將以上的源程序編譯生成exe文件了。

『伍』 各位高手,小弟正在為選擇使用Qt還是WxWidgets而煩惱,請大家給條明路吧!

很好的一篇文章
原文:我所知道的三種開源跨平台GUI toolkits—— GTK、Qt和wxWidgets

1、GTK+

GTK+基礎

GTK+最初是GIMP的專用開發庫,後來發展為Linux下開發圖形界面的應用程序的主流開發工具之一。GTK+2.0是自由軟體,並且是GNU工程的一部分。GTK+2.0的許可協議是LGPL。

GTK+使用C語言開發,但是其設計者使用面向對象技術。 在GNOME平台上提供了C++(gtkmm)、Perl、Ruby、Java和Python(PyGTK)綁定,其他的綁定有Ada、 D、 Haskell、PHP和所有的.NET編程語言。

與其他很多部件工具箱不同,GTK+並不基於Xt。這一決策優劣互見:優點是GTK+可以應用於其他系統,其靈活性也很強;而缺點就是它無法利用以傳統方法為X11定製的X資源資料庫。

Glade是一個界面設計工具,但是它也包含了一種描述GUI界面的XML語言,它和libglade一起工作就可以直接使用GTK和GNOME控制項。

2、Qt

Qt簡介

Qt是Trolltech公司的一個產品。
Qt是一個多平台的C++圖形用戶界面應用程序框架。它提供給應用程序開發者建立藝術級的圖形用戶界面所需的所用功能。Qt是完全面向對象的很容易擴展,並且 允許真正地組件編程。

自從1996年早些時候,Qt進入商業領域,它已經成為全世界范圍內數千種成功的應用 程序的基礎。Qt也是流行的Linux桌面環境KDE 的基礎,KDE是所有主要的Linux發行版的一個標准組件。

Qt支持下述平台: MS/Windows - 95、98、NT 4.0、ME、和2000
Unix/X11 - Linux、Sun Solaris、HP-UX、Compaq Tru64 UNIX、IBM AIX、SGI IRIX和其它很多X11平台
Macintosh - Mac OS X
Embedded - 有幀緩沖(framebuffer)支持的Linux平台。

3、wxWidgets

開源軟體(LGPL),針對C++、Python以及Perl的跨平台工具集。

詳細介紹,參見細述 wxWindows
wxWidget作為一個C++ GUI Library從1992發展到現在,已經在全球范圍內產生了極大的影響力,利用這個類庫進行GUI開發的軟體更是不計其數。

wxWidgets原名wxWindows,是由Julian Smart於1992年還在英國愛丁堡大學人工智慧應用研究所開始的一個項目。Julian Smart現在是Anthemion軟體公司的技術總監。

簡單地說,wxWidgets提供了用於可在多平台上開發GUI應用程序的一整套簡單易學易用的API。wxWidgets支持的多平台包括
Windows 3.1/95/98/NT/2000/XP、帶有Motif
1.2版本以上的Unix、帶有GTK+的Unix/Linux/*BSD、Mac等等。開發者只需要用自己使用的系統平台的編譯器編譯源程序,並鏈接上
相應的庫文件,生成的程序代碼即具有該平台的外觀和界面。在這些GUI之上,wxWidgets還提供了在線幫助、網路編程、流處理、多種常用圖形格式支
持、資料庫支持、HTML察看和列印,等等各種強大的功能。

wxWidgets支持的Windows上的多種流行編譯器包括:
Visual C++ 1.5, 4.0, 5.0, 6.0
Borland C++ 4.5, 5.0
Borland C++ Builder 1.0, 3.0
Watcom C++ 10.6 (Win32)
Cygwin
MinGW32
Metrowerks CodeWarrior 4

wxWidgets和GTK+的一大吸引力是它的wxWidgets 2 licence類型是屬於LGPL ( Lesser
General Public License
)的,也就是說,使用它開發的軟體並不要求一定得公開源碼。這樣,無論是免費軟體的開發者、GPL類型軟體開發者,還是純粹商業軟體開發者都可以免費使用
這個軟體包。

相比之下,TrollTech的Qt似乎正是因為此因素而影響了它的受接受程度,因為用Qt開發商用軟體者所需交納的費用對於個人
開發者來說還是比較昂貴的,而且分單平台、二平台、三平台(即Qt/X11、Qt/Windows和Qt/Mac都包含在內了)三個不同產品包,又分
Professional和Enterprise不同Edition亦即不同價位,而且開發人員數不同價格也不同。

從這點說來,wxWidgets是絕對具有優勢的。另外Qt起源於Linux上的開發,後來推展到Windows、Mac等其它平台;而wxWidgets恰好相反,始於Windows,其後移植到Unix等其它平台。

關於LGPL(Lesser General Public License ) 許可,這是 GNU
許可家族中一個不太嚴格的許可。LGPL 允許任何人使用該庫提供的功能,而不
要求用戶公開應用程序代碼。(這對於許多工業應用來說很重要,因為由於以前的協議或許可,這種場合下一般不希望公開代碼或者公開代碼是顯然不現實的。)使
用 LGPL 許可,您既可以是開放源碼社區的好夥伴也可以是好公民。

中文非正式翻譯參見 http://gnu.freehostingguru.com/lgpl/

其他資源:知名 GUI lib 簡評 (GTK+, Qt, wxWidgets)

Technorati Tags: GTK, Qt, wxWidgets, 圖形界面, 跨平台

從網上搜到的,僅供參考,也許對你會有一點小小的幫助!

『陸』 MFC,WTL,WPF,wxWidgets,Qt,GTK 各有什麼特點

MFC乃曾經的老大,現在來看設計有點落後;原本可以做得更好用,但MS為了推COM而變得臃腫,而現在MS為了推.net更不願意繼續發展它。
WTL基於ATL,ATL是COM組件的模版庫,COM是C++應用中的毒瘤(明知有人會噴我,我依然堅持真理); WTL曾受MS打壓,因為MS怕它的輕巧特性會妨礙推廣.Net,現在不需要打壓了,因為已經扶不上牆了。
WPF:不是給C++用的。
wxWidgets:小巧、小眾、多bug;和MFC差不多,這是優點,也是死穴。
Qt:庫有點龐大,啥都有,信號和槽機制需要特殊的編譯器搞;沒能盡量復用C++已有的庫,看重復的東西會人特別煩。(我個人最看好Qt)。
GTK:兩個字「難用」。

『柒』 如何參與到wxwidgets的開發中去

wxWidgets是一個跨平台的軟體開發包。它誕生於1992年,最初的名子是wxWindows,但由於Microsoft的抗議,在2004年改名為wxWidgets。它最初是被設計成跨平台的GUI軟體開發包,但後來隨著越來越多的人參與進來,為wxWidgets加入了許多非GUI的功能,如多線程(MultiThread)、網路(Network)等。並且從最初的只支持C++語言,逐漸發展成為支持數種語言(如Python、Perl、C#、Basic等)。因此,現在的wxWidgets已經不再是單純的跨平台的GUI軟體開發包,而是一個可以支持多種操作系統平台的能夠在多種語言中使用的通用跨平台軟體開發包。

由於wxWidgets最開始是為C++而設計的,因此,本文主要討論了wxWidgets在C++中的使用。

為什麼選擇wxWidgets?

目前支持C++的軟體開發包非常多,比較有名的除了wxWidgets外,還有一些其它的軟體開發包,如MFC、QT、ACE等。即然有這么多開發包,那麼我們為什麼要使用wxWidgets呢?在給出答案之前,讓我們首先來看一看上述的三種軟體開發包的特性。

1. MFC

MFC是Microsoft提供的軟體開發包。MFC雖然十分強大,但它只能運行在Windows下運行。而且它是收費的。

2. QT

QT是由Trolltech 公司開發的一套跨平台軟體開發包。它和wxWidgets類似,但是QT只在linux下免費,而在Windows或Unix下使用QT要向Trolltech公司支付版權費。

3. ACE

ACE雖然是免費開源的,但是它沒有提供GUI功能。

從以上三個軟體開發包可以看出,它們雖然有各自的優勢,但是它們或多或少地都會使開發受到限制。而使用wxWidgets將不會有以上所述的問題。wxWidgets和MFC、QT、 ACE的特性對比如表1所示。

註:其中免費中的「是/否」代表QT在linux平台上的Free Edition是免費的,而在windows和unix下使用QT是收費的。而開源中的「是/否」代表QT有一個基於GPL的開源版本,但要進行商業開發,需要使用它的商業版本。

使用wxWidgets編寫程序

學習一種編程語言的最好方法就是用它去編寫程序,學習wxWidgets也不例外。由於wxWidgets的主要功能是實現跨平台的GUI,因此,本文主要從GUI入手,討論wxWidgets在C++中如何編寫跨平台的應用程序

1. 應用程序類的建立

使用wxWidgets建立系統需要一個類來描述整個應用程序。這個類必須從wxApp類繼承。

class MyApp : public wxApp //應用程序類

{

public:

virtual bool OnInit(); // 在應用程序啟動時調用,如果返回false,退出應用程序

};

這個類只覆蓋了wxApp的一個虛方法OnInit。可以用這個方法在程序啟動時做一些驗證,如果驗證失敗,可以通過返回false退出應用程序。當然,由於這個函數是應用程序的入口點,所以建立主窗體的工作要在這個函數中完成。

2. 建立窗體類

wxWidgets中關於窗體的類很多,如果要建立一般窗體的話,可以從wxFrame繼承。

class MyFrame : public wxFrame //窗體類

{

public:

MyFrame(const wxString& title); // 窗體的構造函數

};

3. 向窗體中加入控制項

在本文中向這個窗體加入了一個菜單條(Menu Bar)、一個狀態條、一個Panel和一個按鈕。一般我們會在主窗體的構造函數中加入這些控制項。

MyFrame::MyFrame(const wxString& title) : wxFrame(NULL, wxID_ANY, title)

{

wxMenu *fileMenu = new wxMenu; // 建立「文件」菜單

wxMenu *helpMenu = new wxMenu; // 建立「幫助」菜單

// 向菜單中添加子項

helpMenu->Append(wxID_ABOUT, _T("關於"tF1"), _T("顯示關於對話框"));

fileMenu->Append(wxID_EXIT, _T("退出"tAlt-X"), _T("退出應用程序"));

wxMenuBar *menuBar = new wxMenuBar(); // 建立一個菜單條

menuBar->Append(fileMenu, _T("文件")); //將「文件」菜單加入到菜單條

menuBar->Append(helpMenu, _T("幫助")); //將「幫助」菜單加入到菜單條

SetMenuBar(menuBar); //將菜單條放到窗體上

wxPanel *panel = new wxPanel(this); //建立一個Panel

wxButton *button = new wxButton(panel, wxID_ABOUT, "關於", wxPoint(20, 20), wxSize(50, 30)); //建立一個Button

CreateStatusBar(2); //建立一個兩欄的狀態欄

SetStatusText(_T("歡迎使用wxWidgets!")); //設置狀態欄的文本

在數組sample_xpm中描述了sample.ico的屬性和圖標本身。如X代表紅色; o代表黃色等。然後在源程序中通過include 「sample.xpm」引用這個資源文件。要想從這個資源文件中裝載圖標。可使用SetIcon(wxICON(sample)); wxICON讀取資源文件,而SetIcon將這個圖標設置為frame的標題欄圖標。要想將ico文件轉換為這種資源文件,可使用一個免費軟體XnView進行轉換。

5. 顯示主窗體

顯示主窗體非常簡單,只需要將上面建立的MyFrame類實例化,並調用wxFrame的Show方法顯示即可。這些代碼可以寫在MyApp類的OnInit方法中。

bool MyApp::OnInit()

{

//建立MyFrame類的實例

MyFrame *frame = new MyFrame(_T("第一個wxWidgets程序"));

frame->Show(true); //顯示主窗體

return true; //必須返回true,否則應用程序將退出

}

在以上代碼中Show方法有一個參數,如果為true,則以模式窗口的形式顯示,否則以非模式窗口的形式顯示。

6. 向窗體中加入事件

到目前為止,這個程序的界面已經完成了,但還未響應任何事件,下面就詳細闡述如何向這個應用程序中加入事件代碼。

對於事件來說,一般都會由兩部分組成。

(1)調用事件部分

當程序發生某個動作時,如點擊按鈕;選中某個控制項,可能需要執行一段代碼。而這段代碼一般是由系統負責調用的,也就是說系統通過事件函數指針調用相應的代碼。

(2)事件函數本身

事件函數與普通函數一樣,只不過它是在發生了事件之後,由系統調用的。

在wxWidgets中是通過事件哈希表(Event Hash Table)來進行事件處理的,即將相應的事件函數指針保存在一個哈希表中,然後當事件發生時,從這個哈希表中找到相應的事件函數指針,然後通過函數指針調用函數。在使用事件哈希表之前,必須定義它。由於定義哈希表非常復雜,而且每個需要處理事件的類都需要同樣的代碼,因此,wxWidgets為此定義了一個宏DECLARE_EVENT_TABLE()來定義哈希表。可將這個宏寫在MyFrame類的任何位置。它相當於將以下語句放到了MyFrame類中。

private:

static const wxEventTableEntry sm_eventTableEntries[];

protected:

static const wxEventTable sm_eventTable;

virtual const wxEventTable* GetEventTable() const;

static wxEventHashTable sm_eventHashTable;

virtual wxEventHashTable& GetEventHashTable() const;

其中靜態數組變數sm_eventTableEntries保存了MyFrame類中的所有的事件信息。

上面的代碼聲明了處理事件哈希表的一些方法,即然聲明了,就得實現。由於實現代碼也都一樣,因此,wxWidgets也為實現這些方法定義了一組宏。實現這些方法的宏如下所示。

BEGIN_EVENT_TABLE(MyFrame, wxFrame)

EVT_MENU(wxID_EXIT, MyFrame::OnQuit)

EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)

EVT_BUTTON(wxID_ABOUT, MyFrame::OnAbout)

END_EVENT_TABLE()

其中BEGIN_EVENT_TABLE(…)實現了上面定義的方法,以及初始化了靜態變數sm_eventTable。後面兩個EVT_MENU和一個EVT_BUTTON宏初始化了靜態變數sm_eventTableEntries,即將這兩個事件函數的指針(button和about菜單使用一個事件函數OnAbout)和控制項ID保存在sm_eventTableEntries中,最後的END_EVENT_TABLE()宏做為一個空的事件函數指針賦給了sm_eventTableEntries,這有些象C語言中處理字元串,將最後一個字元賦為』"0』,這樣就可以知道哪是結尾了。

向窗體中加入事件的最後一步是聲明和實現事件函數。在本例中聲明了兩個事件函數。

void OnQuit(wxCommandEvent& event);

void OnAbout(wxCommandEvent& event);

可以將這兩個函數聲明放到MyFrame中的任何位置。下面是它們的實現代碼。

void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))

{

Close(true);

}

void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))

{

wxString msg;

msg.Printf( _T("這是一個關於對話框的例子."n")

_T("歡迎使用 %s"), wxVERSION_STRING);

wxMessageBox(msg, _T("¹關於"), wxOK | wxICON_INFORMATION, this);

}

其中OnQuit函數調用Close(true)關閉MyFrame,由於MyFrame是主窗體,因此,在MyFrame關閉後,應用程序也隨之關閉了。OnAbout使用wxMessageBox函數彈出一個信息對話框。

7. 運行程序

到目前為止,這個程序的代碼已經基本完成了,但是在前面曾說過,MyApp中的OnInit方法在應用程序啟動時執行,那麼是誰調用了OnInit方法呢?答案當然是wxWidgets。wxWidgets為了調用這個方法,提供了一個宏IMPLEMENT_APP(…),這個宏有一個參數,需要將MyApp做為參數傳入。即IMPLEMENT_APP(MyApp)。這個宏相當於一個WinMain函數(和控制台程序的main函數類似),即在WinMain函數中調用了MyApp中的OnInit函數。在加入這個宏後,就可使用一個C++編譯器將以上的源程序編譯生成exe文件了。

『捌』 wxwidgets和c#哪個好

1、GTK+

GTK+基礎

GTK+最初是GIMP的專用開發庫,後來發展為Linux下開發圖形界面的應用程序的主流開發工具之一。GTK+2.0是自由軟體,並且是GNU工程的一部分。GTK+2.0的許可協議是LGPL。

GTK+使用C語言開發,但是其設計者使用面向對象技術。 在GNOME平台上提供了C++(gtkmm)、Perl、Ruby、Java和Python(PyGTK)綁定,其他的綁定有Ada、 D、 Haskell、PHP和所有的.NET編程語言。

與其他很多部件工具箱不同,GTK+並不基於Xt。這一決策優劣互見:優點是GTK+可以應用於其他系統,其靈活性也很強;而缺點就是它無法利用以傳統方法為X11定製的X資源資料庫。

Glade是一個界面設計工具,但是它也包含了一種描述GUI界面的XML語言,它和libglade一起工作就可以直接使用GTK和GNOME控制項。

2、Qt

Qt簡介

Qt是Trolltech公司的一個產品。
Qt是一個多平台的C++圖形用戶界面應用程序框架。它提供給應用程序開發者建立藝術級的圖形用戶界面所需的所用功能。Qt是完全面向對象的很容易擴展,並且 允許真正地組件編程。

自從1996年早些時候,Qt進入商業領域,它已經成為全世界范圍內數千種成功的應用 程序的基礎。Qt也是流行的Linux桌面環境KDE 的基礎,KDE是所有主要的Linux發行版的一個標准組件。

Qt支持下述平台: MS/Windows - 95、98、NT 4.0、ME、和2000
Unix/X11 - Linux、Sun Solaris、HP-UX、Compaq Tru64 UNIX、IBM AIX、SGI IRIX和其它很多X11平台
Macintosh - Mac OS X
Embedded - 有幀緩沖(framebuffer)支持的Linux平台。

3、wxWidgets

開源軟體(LGPL),針對C++、Python以及Perl的跨平台工具集。

詳細介紹,參見細述 wxWindows
wxWidget作為一個C++ GUI Library從1992發展到現在,已經在全球范圍內產生了極大的影響力,利用這個類庫進行GUI開發的軟體更是不計其數。

wxWidgets原名wxWindows,是由Julian Smart於1992年還在英國愛丁堡大學人工智慧應用研究所開始的一個項目。Julian Smart現在是Anthemion軟體公司的技術總監。

『玖』 有哪些軟體是wxwidgets開發的

1 先上一段項目截圖,IDE-codeblocks 後台資料庫postgresql。

2 再來張軟體運行截圖

3 引用庫截圖

4 來張資料庫截圖

5 與SAP系統同步類截圖

6 合同標簽引入二維碼截圖

熱點內容
基金多少只比較合適 發布:2025-05-06 20:03:43 瀏覽:320
期貨三條線怎麼看 發布:2025-05-06 19:55:07 瀏覽:325
期貨如何做最保險 發布:2025-05-06 19:51:18 瀏覽:329
平安利順國際貨幣經紀公司待遇怎麼樣 發布:2025-05-06 19:49:50 瀏覽:84
為什麼美國股市不跌反升 發布:2025-05-06 19:44:01 瀏覽:841
基金私募大佬都開什麼車 發布:2025-05-06 19:35:16 瀏覽:466
貨幣類基金是的是什麼 發布:2025-05-06 19:20:03 瀏覽:756
取得合營公司股權指的什麼 發布:2025-05-06 19:13:48 瀏覽:135
股權託管是干什麼用的 發布:2025-05-06 19:13:05 瀏覽:452
關聯方理財產品怎麼樣 發布:2025-05-06 19:08:06 瀏覽:100