* * GTK+簡介
* * *基本概念
GTK+是壹個用於創建圖形界面的庫。嗯,gnome用的就是這個,但不僅僅是這個。
只有在gnome環境下才能使用,只要系統上安裝了GTK庫(基本上有兩個圖形系統)
妳可以運行基於GTK的程序。除了類UNIX平臺,還移植了。
在windows上,有針對嵌入式設備的framebuffer版本等等。
GTK依靠兩個重要的圖書館。壹個是GLib,它不是圖形庫,與GLBC不同。
總的來說,它提供了壹些接口來屏蔽系統的差異,比如gint到處都是32bit。
是的,以此類推;另壹個是GDK,它是壹個獨立於設備的圖形庫,支持基本的繪圖點
與窗口管理器的通信和其他任務,因為GTK被設計成可在各種平臺上使用,而不僅僅是在。
XWindow環境,所以這個庫也是必須的。上面提到了GTK圖書館。
對於壹些小部件——可以理解為控件,但是窗口在這裏也是壹個小部件。
我們使用並提供包裝良好的事件響應機制。
*** GTK+發展基金會
基於GTK開發軟件,首先要安裝GTK+的開發包。檢查它是否安裝正確。
方法是,如果安裝不正確,則在安裝後執行““pkg-config-cflags-libsgtk+-2.0”。
確實會提示找不到對應的包。
GTK本身就是壹個基於C的庫,當然也有C++ wrap之類的語言,但是它的整個系統都是surface。
面向對象。它的基類是gobject,GtkObject繼承,GTKObject派生。
展示我們最常用的GtkWidget,我們使用的所有表單控件都是從它派生出來的。所以,
在C環境中,我們必須手動處理這些類轉換。GTK和他的油嘴滑舌提供了壹種方法。
統壹的轉換方法,比如將GtkWidget*類型的按鈕轉換成GtkButton形狀,
它的寫法是:GTK _巴頓(BUTTON)。
我不打算在這裏列出GTK的hello world頁面。這個程序只是谷歌。
在以下情況下可以找到。我們可以自己思考如何建立壹個圖形界面。
首先,我們需要初始化。GTK提供gtk_init()作為初始化,它檢查程序參數。
在壹些特定的部分,進行自己的設置。調用方法如下:
GTK _ init(& amp;argc & amp;argv);
將argc和argv傳遞給指針的目的是gtk_init將處理它們並放置gtk本身。
提取所使用的壹些參數。
然後,我們必須創建這些控件。在GTK中,創建控件將返回。
指向GtkWidget類型(或其派生類)的指針。所有創建控件的函數的格式是
Gtk_控制類型_新(參數表)。例如,創建窗口的方法是:
GTK widget * WINDOW = GTK _ WINDOW _ new(GTK _窗口_頂層);
然後,我們需要設置事件響應函數。GTK事件被稱為信號事件響應。GTK。
函數界面應該是這樣的。
空的
銷毀(GtkWidget *小部件、gpointer數據)
我們將它連接到控件的方式是這樣的。
G _ signal _ connect(G _ OBJECT(window)," destroy ",G_CALLBACK(destroy),NULL);
應該很好理解。
我們創造了產品“Knock Knock”,來解釋它們的位置和包含關系,GTK用容器解決了這個問題。
壹個問題,它可以保證窗口縮放時控件放置仍然合理,容器是特定的。
不知道具體怎麽用。後面經常要處理容器,但是基本上不用擔心C代碼了吧
然而,事實上,我們的任何可視控件都是從容器繼承來的,比如button。
容器,通常加載了GtkLabel,即用於顯示純文本的控件,
我們可以看到壹個文本按鈕。嗯,容器的使用方法如下。
GTK _ CONTAINER _ add(GTK _容器(窗口),按鈕);
這樣,按鈕就會占據整個窗口控件,這壹點我們後面會看到。
GtkVBox、GtkHBox等容器獨立形式。
好了,我們可以準備開始程序了。我們可以使用gtk_widget_show()來顯示每壹個。
控件,然後我們應該進入所謂的事件響應循環,這個循環使用gtk_main()。
在運行程序的過程中,我們必須操縱控件,例如,我們必須輸入壹個入口控件(文本框
),這樣的操作使用gtk_ control type _ action (object,parameter)的形狀。
比如剛才說的任務就是gtk_entry_get_text(entry)完成的。
順便說壹句,GTK程序的退出,並不意味著關閉GTK窗口(甚至所有窗口)的程序。
退出,因為歸根結底只是壹個接口,當然我們可以用Exit()的自爆方法來退出。
出去,但最好是給GTK壹個處理事情的機會,在主窗口的破壞事件回應信。
在號上用gtk_main_quit()就可以了。
編譯GTK程序的方法也很簡單。
gcc-o foo foo . c ` pkg-config-cflags-libs GTK+-2.0 '
* *使用Glade快速定制用戶界面。
好吧,我說了壹堆。如果我說我上面說的大部分事情,我們沒有。
我會用它。妳覺得我很抱歉嗎?前面的介紹只是給妳壹些GTK圖書館的基本情況。
概念,概念是好的,但是我們真的不需要用這些編程。想想看,壹個更復雜的邊界。
面,十幾個控件,加上各種容器,自己掛事件,加上非凡人生。
名字,想想都嚇人。
這時,林間空地誕生了!這是壹個可視化界面編輯器——但它只是壹個。
只是壹個界面編輯器,連代碼編輯框都沒給。沒關系,打開林中空地(安
饒了我吧,記得裝libglade-dev),應該很好理解,指點壹下就能搞定。
壹個接口,然後在屬性窗口的信號欄選擇需要的信號並設置響應函數,非常好。
明白了。
玩了幾分鐘,問題來了,怎麽把它變成節目?提供類似功能的ide,例如
Borland C++ Builder,當點擊創建壹個新控件時,我們甚至可以在代碼窗口中看到自己。
Glade也可以將這種形式用於動態生成的代碼。設計好界面並保存後,點擊主按鈕。
窗口中,它自動生成接口代碼,無需自己編寫。打開代碼。
目錄中,callbacks.c已經有了壹個自動創建的事件響應的空函數,它被填充和處理,但是
稍後配置make即可。
但是,這種開發方法仍然存在問題。首先,自動生成的代碼非常復雜,但它非常
很多時候我們還是不能完全忽略它。處理和接口混在壹起,理解起來就變得困難了。
;其次,由於以上原因,修改界面很痛苦;第三,它為妳生成了壹堆東西。
缺少配置文件不壹定是您想要的。
因此,glade提供了另壹種方法。的。glade編輯的glade文件是壹個XML文檔。
a,其實已經完整的描述了界面,能不能用簡單的方式直接加載匹配?
那又怎麽樣?這樣做,我們真正擺脫了代碼中煩人的接口生成代碼,而是專攻它。
加工部分的註意事項。
正因為如此,libglade才能做好上述工作。當我們使用
glade創建了壹個. glade接口後,我們就可以這樣構建接口,運行程序了。
結束了。
# include & ltGTK/GTK . h & gt;
# include & ltglade/glade . h & gt;
GladeXML * GUI
(同Internationalorganizations)國際組織
main(int argc,char **argv)
{
GTK _ init(& amp;argc & amp;argv);
/*加載接口*/
GUI = glade_xml_new("frame.glade ",NULL,NULL);
/*連接接口中的信號*/
glade _ XML _ signal _ auto connect(GUI);
/*開始事件循環*/
GTK _ main();
返回0;
}
如果按鈕的點擊控件有響應功能,剩下的就簡單了。
點擊按鈕,妳寫下
空的
on _ button _ clicked(GtkWidget * widget,gpointer數據)
{
//巴拉巴拉巴拉
}
那很好。所以,上面提到的大多數創建接口的方法實際上都是不必要的。
由於使用了libglade,我們的編譯方法變成了
gcc-o foo foo . c ` pkg-config-cflags-libs libglade-2.0 '
* *開發示例
壹個很簡單的程序,要用到的密碼對稱加密算法,如果是壹個接口,那就是三篇文章。
這個盒子:明文,密碼,密文,三個按鈕,加密,解密,明文,完畢。對於很多實驗來說。
我們添加了壹個下拉窗口來選擇算法。我把它設計成壹個包裝。
而且它不實現任何算法,只是在接口中獲取用戶輸入,調用外部程序,並把
結果只是顯示出來。這樣,實際的算法實現就可以用壹個純C編寫的文本接口程序來完成,
移植起來非常方便,只需要在windows中做和前端壹樣的界面,整個移植就結束了。
所以,我們需要的表單元素是gtkentry,gtkcombboxentry,gtkbutton,check。
手動,我們只使用以下界面相關功能:
-gtk_entry_get_text(),用於獲取文本框輸入。
-gtk_entry_set_text()在文本框中顯示結果。
-gtk_combo_box_get_active_text(),用於ComboBoxEntry(派生自
ComboBox)取出用戶選擇的算法。
另壹個問題是,它們都需要相應的對象指針作為參數。我們應該如何得到它們?我們制造
使用glade_xml_get_widget(GUI,“控件名”)獲取控件。