初学GTK+,直接贴代码:

 1 /*************************************************************************
 2     > File Name: main.cpp
 3     > Author: nomis
 4     > Mail: simon4761@163.com 
 5     > Created Time: Sun 19 Aug 2012 03:42:42 PM CST
 6  ************************************************************************/
 7 
 8 
 9 #include<iostream>
10 #include<gtk/gtk.h>
11 using namespace std;
12 class Test{
13 public:
14     Test(){}
15     ~Test(){}
16     static void print_hello (GtkWidget *widget , gpointer data){
17         g_print ("Hello World\n");
18     }
19 };
20 
21 int main(int argc , char* argv[]){
22 
23     GtkWidget* window;
24     GtkWidget* button;
25     gtk_init(&argc , &argv);
26     window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
27     gtk_window_set_title(GTK_WINDOW(window),"helloworld");
28     g_signal_connect(window , "destroy" , G_CALLBACK(gtk_main_quit) , NULL);
29     gtk_container_set_border_width (GTK_CONTAINER (window), 10);
30     button = gtk_button_new_with_label ("Hello World");
31     g_signal_connect (button, "clicked", G_CALLBACK (Test::print_hello), NULL);
32     gtk_container_add (GTK_CONTAINER (window), button);
33     gtk_widget_show (button);
34     gtk_widget_show(window);
35     gtk_main();
36     return 0;
37 }
这是GTK+文档中的一个实例,但是被我改动过.
我们可以将print_hello或者其它的回调函数放在另一个类里面,而放在其它类里面需要满足的条件是,函数必须由static修饰.然后通过类名::函数名的方法将回调函数传值.