初学GTK+,直接贴代码:

 1  /* ************************************************************************
 2      > File Name: main.cpp
 3      > Author: nomis
 4      > Mail: [email protected] 
 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修饰.然后通过类名::函数名的方法将回调函数传值.