最近需要用gtk做点东西,所以就开始学习GTK了,以前学过一点QT,也用QT在windows下做过一个骨骼动画播放程序,所以入门还算轻松。和QT比起来GTK更底层,相当与QT的back-end.
本人是在fedora下做开发,直接用yum安装。你也可以参照这个页面来自己编译安装
$yum install gtk3-devel
/************************************************************************* > File Name: gtk-test.cpp > Author: songtianyi > Mail: songtianyi@163.com > Created Time: Tue 30 Jul 2013 03:17:19 PM CST ************************************************************************/ static void print_hello () { g_print ("Hello World\n"); } static gboolean on_delete_event () { g_print("delete event occurred\n"); return FALSE; } int main(int argc,char *argv[]) { /*widget 变量*/ GtkWidget *window; /*所有的GTK程序都需要调用的函数,它会解析main函数得到的参数 以便对GTK程序 进行一些控制, 识别不了的参数会返回给main函数*/ gtk_init(&argc,&argv); /*新建一个顶级窗口并设置Title*/ window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), "第一个GTK程序"); /*当点击windows右上角的关闭时,窗口会发出"delete-event"的信号,将这个信号 捕捉并交给之前定义的on_delete_event函数处理,这样我们就可以在窗口关闭之前 做些想做的工作。在这里称on_delete_event为delete_event的回调函数。 相当于QT的信号和槽(signal-slot)机制*/ g_signal_connect (window, "delete-event", G_CALLBACK (on_delete_event), NULL); /*和上一个函数类似,将gtk_main_quit函数作为destroy信号的回调函数。当调用 gtk_widget_destroy函数或者delete_event的回调函数返回FALSE的时候,destroy信号 会发出*/ g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); /*设置windows边框大小*/ gtk_container_set_border_width(GTK_CONTAINER(window),10); /*新建一个按钮,按钮上显示的内容为"print hello world"*/ GtkWidget *button = gtk_button_new_with_label("print hello world"); g_signal_connect(button,"clicked",G_CALLBACK(print_hello),NULL); /*将按钮放进窗口*/ gtk_container_add(GTK_CONTAINER(window),button); /*显示按钮*/ gtk_widget_show(button); /*显示窗口*/ gtk_widget_show (window); /*进入事件循环*/ gtk_main (); /*事件结束*/ printf("The end of GTK application !"); return 0; }
控件和消息机制,GUI程序最基本的两个要素都有了。编辑好源程序之后,用下面的命令来编译和运行,或者参照Compiling GTK+ Applications。
$gcc `pkg-config --cflags --libs gtk+-3.0` gtk-test.cpp $./a.out
图1 第一个GTK程序