GTK初探

update@2013-07-31

最近需要用gtk做点东西,所以就开始学习GTK了,以前学过一点QT,也用QT在windows下做过一个骨骼动画播放程序,所以入门还算轻松。和QT比起来GTK更底层,相当与QT的back-end,详细的对比见这里


  1. 安装GTK开发包
  2. 第一个GTk程序
  3. 参考资料


1 安装GTK开发包

本人是在fedora下做开发,直接用yum安装。你也可以参照这个页面来自己编译安装

 $yum install gtk3-devel 

2 第一个GTK程序

/*************************************************************************
	> 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 


2013年07月31日 - songtianyi - songtianyi

图1 第一个GTK程序

3 参考资料

[1]GTK+3 Reference Manual [OL]. https://developer.gnome.org/gtk3/stable/