用 Libglade
快速開發 GTK+ 視窗程式

Last Update : 10 / 28 / 2007 By DarkRanger .

前言

使用 Glade

程式碼撰寫與使用 Libglade

完整程式碼範例

編譯與 Makefile

執行範例

參考網站



前言


GTK+(The GIMP Toolkit)可說是在 Linux 視窗環境上相當重要的圖形介面函式庫,除了有大量的工具軟體是由 GTK+ 寫成外,著名且常見的 GNOME 桌面環境也是基於 GTK+。然而如果以傳統的方式來撰寫 GTK+ 程式,光是介面本身就必須使用大量的程式碼來建構,而如果使用 Glade (Glade Interface Designer)這類的介面設計工具去產生程式碼,則會造成自行修改與維護上的困難(事實上,Glade-3 已經取消產生程式碼的功能)。於是就有了 Libglade 這個中介函式庫,Libglade 可以在程式執行時直接載入用 Glade 設計、XML 格式的介面設定檔,並依設定內容來產生介面。如此,一來免除了撰寫大量介面程式碼的麻煩,二來可以維持對整體程式的掌控,而整個程式開發流程就會如下所示:

(1) 用 Glade 設計視窗與物件

(2) 用 Libglade 載入 Glade 產生的 XML 存檔

(3) 開始撰寫物件功能(註:本文所稱的『物件』指的是 widget

使用 Glade

DR 使用的是 Fedora Core 6,裡頭已經有包含 Glade,而 Glade 的操作也非常的直覺且簡單,應該是不需要多說明什麼,DR 在這部份只提醒兩件事,一是必須先在視窗中加入 GtkFixed 物件(中文提示好像叫作『固定位置』)才能自由的調整物件位置與大小,二是只要按『儲存』就可產生 XML 存檔,不需要其它程序。儲存後就會產生副檔名為 *.glade 的存檔,請好好保存,接下來的程式撰寫與執行就會用到。

程式碼撰寫與使用 Libglade

先在程式碼開頭加入兩個標頭檔:

#include <gtk/gtk.h>
#include <glade/glade.h>

然後宣告並載入檔名為 test.glade 的 XML 存檔:

GladeXML *xml ;
xml = glade_xml_new("test.glade", NULL, NULL) ;
glade_xml_signal_autoconnect(xml) ;

假設要呼叫的物件名稱為 window1,宣告與呼叫方式:

GtkWidget *window1 ;
window1 = glade_xml_get_widget (xml, "window1") ;

加上指令連結,當 window1 關閉時結束程式:

gtk_signal_connect(GTK_OBJECT(window1),"destroy", GTK_SIGNAL_FUNC(gtk_main_quit),NULL) ;

完整程式碼範例

#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>
#include <glade/glade.h>

int main(int argc, char *argv[])
{
    GladeXML *xml;
    GtkWidget *window1 ;

    gtk_init(&argc, &argv);
    xml = glade_xml_new("test.glade", NULL, NULL);
    glade_xml_signal_autoconnect(xml);

    window1 = glade_xml_get_widget (xml, "window1");

    gtk_signal_connect(GTK_OBJECT(window1),"destroy",
    GTK_SIGNAL_FUNC(gtk_main_quit),NULL);

    gtk_main();

    return 0;
}

編譯與 Makefile

GTK+ 的程式編譯需要載入許多標頭檔與涵式庫,但只要使用 pkg-config 就可以方便的解決這類需求

# gcc `pkg-config --cflags libglade-2.0` test.c -o gtk-test `pkg-config --libs libglade-2.0`

上述範例是假設程式碼檔名為 test.c,而要輸出的執行檔檔名為 gtk-testMakefile 的撰寫範例如下:

CFLAGS = -Wall -g -O2 `pkg-config --cflags libglade-2.0`
LIBS = `pkg-config --libs libglade-2.0`
CC = gcc

gtk-test:
    ${CC} ${CFLAGS} test.c -o gtk-test ${LIBS}

clean:
    rm -rf *.o gtk-test

(注意:${CC} 和 rm 前方的空白處是 Tab 鍵而不是 Space 鍵,用 Space 會有『missing separator』的錯誤。)

執行範例

# ./gtk-test



如此一來圖形介面就可以直接產生了,而且程式碼中並沒有物件大小與位置設定的部份,那些設定都是從 XML 檔中讀取出來的。當然,物件的功能撰寫又是另一回事了……

參考網站

http://www.gtk.org/

http://glade.gnome.org/

http://www.jamesh.id.au/software/libglade/



Back to DarkRanger.no-ip.org