最近需要用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程序