Gtk+-3.0实例5.Signals/Callback/Data的使用说明

Signals/Callback/Data的使用说明

1.代码说明

  • 通过time_to_go()说明gpointer类型参数data的传入与使用
  • 通过gtk_widget_destroy()button_clicked_cb()的使用,说明较短形式的信号-回调函数的连接方式
  • 通过 vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL /*GTK_ORIENTATION_HORIZONTAL*/, 2);说明Gtk+3中box容器的使用方式

2.源码如下(boxes.c)

#include <gtk/gtk.h>

#define NUM_NAMES 4
const gchar* names[] = { "Andrew", "Joe", "Samantha", "Jonathan" };

/* Stop the GTK+ main loop function. */
static void
time_to_go (GtkWidget *window,
         gpointer data)
{
	g_print("Time to go,please say: %s",(gchar *)data);
	gtk_main_quit ();
}
//用于g_signal_connect(),以便和g_signal_connect_swapped()函数的使用进行对比
/*static void
button_clicked_cb (GtkButton *button, 
                   GtkWidget *other_widget)
{
    gtk_widget_destroy (other_widget);
}*/

int main (int argc,
          char *argv[])
{
	gint i;
	GtkWidget *window, *vbox;
	gtk_init (&argc, &argv);
	
	window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title (GTK_WINDOW (window), "Boxes");
	gtk_container_set_border_width (GTK_CONTAINER (window), 10);
	gtk_widget_set_size_request (window, 200, -1);
	g_signal_connect (G_OBJECT (window), "destroy",
	   G_CALLBACK (time_to_go),"Bye,Boxes!"/*对应回调函数中所需数据-gpointer data*/);

	vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL /*GTK_ORIENTATION_HORIZONTAL*/, 2);
	/* Add four buttons to the vertical box. */
	for (i = 0; i < NUM_NAMES; i++)
	{
		GtkWidget *button = gtk_button_new_with_label (names[i]);
		gtk_box_pack_start(GTK_BOX (vbox), button, FALSE,FALSE,2);

		//------------------------------------------------------------
		//较短的信号-回调形式,可以直接传入特定的对象参数button给指定回调函数,
		//如gtk_widget_destroy,该形式更简洁.
		//------------------------------------------------------------
		g_signal_connect_swapped (button, "clicked",
		                          (GCallback) gtk_widget_destroy,
		                          (gpointer) button);
		
		//----------------------------------------------
		//较长的信号-回调形式,需要定义单独的回调函数,
		//如button_clicked_cb(),并传入特定的对象参数button
		//----------------------------------------------
		/*g_signal_connect (button, "clicked",
		                 (GCallback) button_clicked_cb,
		                 (gpointer) button);*/
	}
	
	gtk_container_add (GTK_CONTAINER (window), vbox);
	gtk_widget_show_all (window);
	gtk_main ();
	return 0;
}

3.运行结果

在这里插入图片描述
在这里插入图片描述

boxes

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值