- 論壇徽章:
- 0
|
1.Gtk 簡介
GTK (GIMP Toolkit) 是一套用于創(chuàng)建圖形用戶界面的工具包。它遵循 LGPL
許可證,所以可以用它來開發(fā)開源軟件、自由軟件,甚至是封閉源代碼的商業(yè)軟件,而不用花費任何費用來購買許可證和使用權(quán)。當(dāng)前,GTK已經(jīng)被成功地應(yīng)用到
了大量的自由軟件及商業(yè)軟件中,已經(jīng)取得了很大的成功。
當(dāng)前,GTK主要由幾大組件構(gòu)成:
*Gtk+:GTK的主要構(gòu)件,包括所有的圖形控件及大量實用的API。
*Glib:包含一些標(biāo)準(zhǔn)函數(shù)的替代函數(shù),以及一些處理鏈表等數(shù)據(jù)結(jié)構(gòu)的函數(shù)等。這些替代函數(shù)被用來增強GTK 的可移植性,同時提供 libc 的對應(yīng)函數(shù)的增強版本。
*Pango:該組件用來處理國際化文字輸出。
GTK是一個跨平臺的GUI開發(fā)庫, 它是用C語言以O(shè)O的方式(俗稱面向?qū)ο驝, 又稱OO-C)開發(fā)的. 只要是有一定C語言和GUI開發(fā)基礎(chǔ), 用GTK是一件很簡單的事.
2.安裝與配置
筆者的操作系統(tǒng)為ubuntu 8.04
sudo apt-get install build-essential #這將安裝gcc/g++/gdb/make 等基本編程工具
sudo apt-get install gnome-core-devel #這將安裝 libgtk2.0-dev libglib2.0-dev 等開發(fā)相關(guān)的庫文件
sudo apt-get install pkg-config #用于在編譯GTK程序時自動找出頭文件及庫文件位置
sudo apt-get install devhelp #這將安裝 devhelp GTK文檔查看程序
sudo apt-get install libglib2.0-doc libgtk2.0-doc #這將安裝 gtk/glib 的API參考手冊及其它幫助文檔
sudo apt-get instal glade libglade2-dev #這將安裝基于GTK的界面構(gòu)造程序
運行如下命令檢查安裝:
pkg-config --cflags gtk+-2.0
-I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include
-I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0
-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
-I/usr/include/freetype2 -I/usr/include/libpng12
-I/usr/include/pixman-1
pkg-config --libs gtk+-2.0
-lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm
-lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl
-lglib-2.0
3.實例
#include gtk/gtk.h>
int main(int argc, char *argv[])
{
/* A window and a button */
GtkWidget *win, *btn;
/* Initialize GTK */
gtk_init(&argc, &argv);
/* New a window and a button */
win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
btn = gtk_button_new_with_label("Close yourself");
/* Add button to window container */
gtk_container_add(GTK_CONTAINER(win), btn);
/* Connect "close" and button to quit op */
g_signal_connect(win, "destroy", G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect(btn, "clicked", G_CALLBACK(gtk_main_quit), NULL);
/* Show all in the window */
gtk_widget_show_all(win);
/* Main loop, wait for signals */
gtk_main();
return 0;
}
上面的程序為main.c, 它所完成的功能就是創(chuàng)建一個窗口(window), 在窗口中添加一個按鈕(button), 點擊這個button或者是窗口的關(guān)閉按鈕, 就會實現(xiàn)窗口的關(guān)閉, 并使程序結(jié)束.
這幾行代碼很簡單, 主要有幾個關(guān)鍵:
- GtkWidget: 創(chuàng)建一個窗口和一個按鈕. GTK中的控件都要用GtkWidget類型創(chuàng)建.
- gtk_init(): 對程序用命令行參數(shù)進行初始化.
- gtk_xxx_new(): 新建xxx類型的控件
- gtk_container_add(): 把控件添加到container容器中, 在這里是把按鈕添加到窗口中.
- g_signal_connect(): 把GTK控件對應(yīng)的操作信號, 連接到CALLBACK函數(shù)上.
- gtk_widget_show_all(): 顯示窗口.
- gtk_main(): 開始main loop, 等待信號觸發(fā)事件.
4. 編譯
我用一個makefile來展示編譯命令.
# Target, compiler and objects.
EXEC = test
CC = gcc
OBJ = main.o
# Use for compile.
CFLAGS = `pkg-config --cflags gtk+-2.0`
# Use for link.
CLIBS = `pkg-config --libs gtk+-2.0`
$(EXEC): $(OBJ)
$(CC) -o $@ $^ $(CLIBS)
main.o: main.c
$(CC) -c $ $(CFLAGS)
clean:
rm $(EXEC) *.o
這里于普通的makefile不同的地方是CFLAGS和CLIBS兩個變量, 分別用于編譯和鏈接.
用`......`引用pkg-config實現(xiàn)參數(shù)的flags.
在編譯時只需要在終端下執(zhí)行make命令, 就會在目錄下生成test可執(zhí)行文件.
本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u2/87718/showart_1832363.html |
|