GTK+2.0之初始学习篇(二)—— g_signal_connect宏解释及HelloWorld
GTK+2.0中利用信号/回调函数机制来处理窗口外部传来的事件、消息或信号。
以下实现的是单击窗口关闭按钮,窗口自动关闭。在程序中调用了gtk_main_quit()函数实现退出主循环。
#include
void on_delete_event(); //函数声明
int main(int argc, char* argv[])
{GtkWidget *window;gtk_init(&argc, &argv);window = gtk_window_new(GTK_WINDOW_TOPLEVEL);/**这里要注意的是g_signal_connect宏.*/g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(on_delete_event), NULL);gtk_window_set_title(GTK_WINDOW(window), "第二个练习窗口例子");gtk_window_set_default_size(GTK_WINDOW(window),500, 100);/**设定窗口的位置在父窗口的中部*/gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);gtk_widget_show(window);gtk_main();return FALSE;
}
/**实现退出主循环
*/
void on_delete_event(GtkWidget *widget, GdkEvent* event, gpointer data)
{gtk_main_quit();
}
g_signal_connect宏是今天学习的目的之一。g_signal_connect宏有4个参数
gulong g_signal_connect( gpointer *object,const gchar *name,GCallback func,gpointer func_data ); 它们分别是连接信号控件的指针(连接的对象)、信号名称、回调函数以及传递给回调函数的参数。而第三个回调函数一般为以下的形式
void callback_func( GtkWidget *widget, gpointer callback_data ); 第一个参数是指向发出信号的控件指针,第二个参数是g_signal_connect宏的最后一个参数传进来的数据指针。
接下来我们来学习HelloWorld的代码。在上面的代码里添加HelloWorld。
#include
//函数声明
void on_delete_event();
void on_button_clicked();
//定义单击次数统计
gint data_count = 1;int main(int argc, char* argv[])
{GtkWidget *window;GtkWidget *button;gtk_init(&argc, &argv);window = gtk_window_new(GTK_WINDOW_TOPLEVEL);g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(on_delete_event), NULL);gtk_window_set_title(GTK_WINDOW(window), "Hello World Test");gtk_window_set_default_size(GTK_WINDOW(window),500, 100);gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);gtk_container_set_border_width(GTK_CONTAINER(window),50);button = gtk_button_new_with_label("按下按钮将会显示一行信息:");//响应click事件g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_button_clicked),(gpointer)data_count);gtk_container_add(GTK_CONTAINER(window),button);gtk_widget_show(button);gtk_widget_show(window);gtk_main();return FALSE;
}void on_delete_event(GtkWidget *widget, GdkEvent* event, gpointer data)
{gtk_main_quit();
}
/**实现单击显示Hello World 结果以及显示单击的次数data_count
*/
void on_button_clicked(GtkWidget *button, gpointer userdata)
{g_print("Hello,The test for 'Hello World'!");g_print("%d\n", data_count);data_count = data_count + 1;
} 执行 $gcc -o gtksec ./gtk_sec.c `pkg-config --cflags --libs gtk+-2.0`
将会看到程序结果。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
