GTK (GIMP Toolkit) 是一套用于创建图形用户界面的工具包。它遵循 LGPL 许可证,所以可以用它来开发开源软件、*软件,甚至是封闭源代码的商业软件,而不用花费任何费用来购买许可证和使用权。当前,GTK已经被成功地应用到了大量的*软件及商业软件中,已经取得了很大的成功。
当前,GTK主要由几大组件构成:
*Gtk+:GTK的主要构件,包括所有的图形控件及大量实用的API。
*Glib:包含一些标准函数的替代函数,以及一些处理链表等数据结构的函数等。这些替代函数被用来增强GTK 的可移植性,同时提供 libc 的对应函数的增强版本。
*Pango:该组件用来处理国际化文字输出。
GTK是一个跨平台的GUI开发库, 它是用C语言以OO的方式(俗称面向对象C, 又称OO-C)开发的. 只要是有一定C语言和GUI开发基础, 用GTK是一件很简单的事.
2.安装与配置
笔者的操作系统为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 等开发相关的库文件
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 install glade libglade2-dev #这将安装基于GTK的界面构造程序
运行如下命令检查安装:
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[])
{
GtkWidget *win, *btn;
gtk_init(&argc, &argv);
win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
btn = gtk_button_new_with_label("Close yourself");
gtk_container_add(GTK_CONTAINER(win), btn);
g_signal_connect(win, "destroy", G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect(btn, "clicked", G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show_all(win);
gtk_main();
return 0;
}上面的程序为main.c, 它所完成的功能就是创建一个窗口(window), 在窗口中添加一个按钮(button), 点击这个button或者是窗口的关闭按钮, 就会实现窗口的关闭, 并使程序结束.
这几行代码很简单, 主要有几个关键:
GtkWidget: 创建一个窗口和一个按钮. GTK中的控件都要用GtkWidget类型创建.
gtk_init(): 对程序用命令行参数进行初始化.
gtk_xxx_new(): 新建xxx类型的控件
gtk_container_add(): 把控件添加到container容器中, 在这里是把按钮添加到窗口中.
g_signal_connect(): 把GTK控件对应的操作信号, 连接到CALLBACK函数上.
gtk_widget_show_all(): 显示窗口.
gtk_main(): 开始main loop, 等待信号触发事件.
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实现参数的flags.
在编译时只需要在终端下执行make命令, 就会在目录下生成test可执行文件.
http://blog.sina.com.cn/s/blog_437e890e0100w1m8.html