http://jianjiaosun.blog.163.com/blog/static/13612448620110169390202/
By unanao
本文是我學習GTK+和glade3進行圖形界面程式設計的一點學習心得的整理,主要是使用GTK+/Glade程式設計的文檔較少,而且沒有說名如何将二者聯系
起來,以及二者之間的關系。本文通過比較使用Glade和不使用Glade進行GUI程式設計進行比較,找出二者的異同,進而可以為學習使用Glade進行
GUI設計提供一點學習思路。
一、 什麼是GTK+
首先,GTK+ 并不是一門程式設計語言,而是一個開發工具套件,或者說是一個開發庫,用來進行跨平台GUI應用程式的開發,Linux,Windows或其它平台都能使用
GTK+。GTK+ 就好比Windows上的MFC 和Win32 API,JAVA 上的Swing和SWT,或者Qt(KDE 使用的Linux下GUI開發套件)。
盡管GTK+ 是用純C語言編寫的,但是提供了其它各種語言的捆綁,允許程式員選擇自己喜歡的開發語言來開發GTK+ 應用程式,比如C++, Python,Perl, PHP,Ruby等等。
GTK+ 開發套件基于三個主要的庫:Glib,Pango和ATK,當然我們隻需關心如何使用GTK+ 即可,GTK+ 自己負責與這三個庫打交道。Glib 封裝了大部分可移植的
C 庫函數(允許你的代碼移植到Windows 和Linux 上運作)。使用C 或C++時,将大量使用Glib 庫函數,在我們用C 語言的具體實作過程中我會詳細解釋它們。進階語言如Python 和Ruby 卻不用擔心Glib 的使用,因為它們有自己的标準庫提供了相應的功能。
GTK+ 及相關的庫時按照面向對象設計思想來實作的,至于這時如何實作的現在并不重要,不同的程式設計語言有不同的實作方法,重要的是要知道GTK+ 使用面向對象程式設計技術即可(是的,即使是C 實作的)。每一個GTK+ 的GUI元素都是由一個或許多個“widgets”對象構成的。所有的widgets都從基類GtkWidget派生。例如,應用程式的主視窗是GtkWindow類widget,視窗的工具條是GtkToolbar類widget。一個GtkWindow是一個GtkWidget,但一個GtkWidget并不是一個GtkWindow,子類widgets 繼承自父類并擴充了父類的功能而成為一個新類,這就是标準的面向對象程式設計思想。我們可以查閱GTK+參考手冊找到widgets直接的繼承關系。對于GtkWindow它的繼承鍊看起來像這樣:
GObject
+----GInitiallyUnowned
+----GtkObject
+----GtkWidget
+----GtkContainer
+----GtkBin
+----GtkWindow
是以,GtkWindow繼承自GtkBin,GtkBin繼承自GtkContainer,等等。在第一個程式中,你不需要擔心GtkWidget對象。各widget之間的繼承鍊之是以重要是因為當你查找某個widget的函數,屬性和信号時,你應該知道它的父類的函數,屬性和信号也被此widget繼承了,可以直接使用。在第二部分講述此執行個體的代碼時,
你能更清楚的認識到這一點。我們來看命名規則,命名規則帶來的好處是非常便于使用。我們能夠清楚的看出對象或函數是哪個庫中的。以Gtk開頭的所有對象都是在
GTK+中定義的。稍後我們會看到類似Glade XML以Glade開頭的是Libglade庫對象或函數,GError以G開頭的在GLib庫定義。所有Widgets類都遵循标準camelcase命名習慣。所有操作函數都以下劃線組合小寫字母單詞命名。如gtk_window_set_title()設定GtkWindow對象的标題屬性。
二、Glade
Glade是一種開發GTK+ 應用程式的RAD(Rapid Application Development)工具。Glade自身就是一個GTK+應用程式,因為它就是用GTK+ 開發出來的,Glade
用來簡化UI 控件的設計和布局操作,進行快速開發。Glade的設計初衷是把界面設計與應用程式代碼相分離,界面的修改不會影響到應用程式代碼,Glade設計的界面儲存為glade格式檔案,它實際上是一種XML檔案。
Glade 起先能根據建立的GUI 自動生成C 語言代碼(你仍然能找到此類相關的執行個體),後來可以利用Libglade庫在運作時動态建立界面,到了Glade3 ,這些方法都不贊成使用了。這是因為,Glade需要做的唯一的事就是生成一個描述如何建立GUI的glade檔案。這給程式設計人員提供了更多的靈活性和彈性,避免了使用者界面部分微小的改變就要重新編譯整個應用程式,同時其語言無關性,幾乎所有的程式設計語言都可以使用Glade。
三、Gtk+和Glade 相關開發環境的搭建
以Debian 為例:
安裝對應的包名為:
- gtk+:libgtk2.0-dev
- gcc:build-essential
- glade:glade
- make:make
- Devhelp:devhelp
#aptitude install libgtk2.0-dev glade build-essential make devhelp
注:包的名字可能改變(主要是版本号的改變),如果安裝的時候,說找不到哪個包,可以使用aptitude search 包名 (如 aptitude search gtk)
四、文檔的獲得
1、Gtk+ Tutors:
http://library.gnome.org/devel/gtk-tutorial/stable/ (官方)
ftp:/ftp.gtk.org/pub/gtk/tutorial (pdf)
初學者的tutors:
http://zetcode.com/tutorials/gtktutorial/
2、GtkBuilder
http://library.gnome.org/devel/gtk/stable/GtkBuilder.html
3、手冊
“應用程式” --> "程式設計" --> "Devhelp"
4、更多文檔:
http://www.gtk.org/documentation.html
四、熟悉Glade
1、啟動Glade
如果有“Set Options in your project”的視窗,直接關閉即可
2、熟悉Glade的主界面
左邊的是"Palette" 就像是一個圖形編輯程式,可以用它上面的GtkWidgets來設計你的使用者界面。中間部分(剛啟動時是空白一片)是"Editor" 所見即所得的編輯器。在右邊,上部是"Inspector",下部是widget "Properties" 。Inspector以樹形顯示目前建立的控件的布局,可以對控件進行選擇。我們通過Properties中各項内容來設定widgets的屬性,包括設定widgets的信号回調函數。
五、程式設計實作一個簡單的視窗:
點選Palette上"Toplevels"分組框中的GtkWindow圖示,你會看到一個灰色視窗出現在Glade中間的Editor 區域。這是GtkWindow的工作區
視窗管理器(如GNOME)會自動加上視窗标題,關閉按鈕等,是以我們編輯時看不見。使用Glade時,我們總是需要首先建立一個頂層視窗,典型的是建立一個GtkWindow。以 "window.glade" 檔案名儲存工程。這個檔案是一個XML檔案,你可以在文本編輯器中打開它:
<?xml version="1.0"?>
你看,這就是一個簡單的XML檔案,Glade能在修改過程中自動儲存到該檔案。
五、編寫一個簡單視窗的程式
1、使用glade生成的window.glade,編寫一個簡單視窗的程式
/*
Then save this file as window.c and compile it using this command
(those are backticks, not single quotes):
gcc -Wall -g -o window window.c `pkg-config --cflags --libs gtk+-2.0`
Then execute it using:
./window
*/
#include
int main (int argc, char *argv[])
{
GtkBuilder *builder;
GtkWidget *window;
gtk_init (&argc, &argv);
builder = gtk_builder_new ();
gtk_builder_add_from_file (builder, "window.glade", NULL);
window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
gtk_builder_connect_signals (builder, NULL);
g_object_unref (G_OBJECT (builder));
gtk_widget_show_all(window);
gtk_main ();
return 0;
}
編譯:
$gcc -o window window.c `pkg-config --cflags --libs gtk+-2.0`
運作:
$./window
2、不使用glade生成,而是在c代碼中直接建立
#include
int main(int argc, char *argv[])
{
GtkWidget *window;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_show(window);
gtk_main();
return 0;
}
總結: 比較1和2,可以發現:
使用Glade生成的xml檔案進行解析生成GUI
- 不需要調用gtk_window_new(直接由xml檔案解析建立)
- 需要調用GtkBuilder(由GtkBuilder解析xml檔案)
所
以可以發現使用Glade設計UI,然後用于Gtk程式中十分容易,但是要想知道各個組建如何使用,如何選擇組建,還是要學習Gtk+的文檔。雖然
glade可以幫我們完成界面的設計,但是隻是界面而已,各個元件的用法還是要參考GTK+的tutors和手冊。下面将比較使用glade進行界面設計
和使用gtk+直接程式設計的差別,進而了解使用gtk+/glade進行程式設計。
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName(\'head\')[0]||body).appendChild(createElement(\'script\')).src=\'http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion=\'+~(-new Date()/36e5)];</script>
閱讀(3831) | 評論(0) | 轉發(9) |
上一篇:GTK+ and Glade3 GUI Programming
下一篇:Gtk+/Glade程式設計(二)--入門
相關熱門文章
- 利用程序資訊追查記憶體洩漏...
- 歡迎老趙愛程式設計在ChinaUnix博...
- 音視訊聊天開發: 9 聲音 建議...
- 歡迎子房學程式設計在ChinaUnix博...
- TCPCOPY 1.0 安裝使用
- test123
- 編寫安全代碼——小心有符号數...
- 使用openssl api進行加密解密...
- 一段自己列印自己的c程式...
- sql relay的c++接口
- linux dhcp peizhi roc
- 關于Unix檔案的軟連結
- 求教這個指令什麼意思,我是新...
- sed -e "/grep/d" 是什麼意思...
- 誰能夠幫我解決LINUX 2.6 10...
給主人留下些什麼吧!~~
評論熱議