QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1335|回复: 6

GTK中如何如何写单选按钮的信号连接函数?

[复制链接]
发表于 2003-11-30 20:38:31 | 显示全部楼层 |阅读模式
如何识别哪个单选按钮被点击?

我做单选按钮的步骤如下:
1) 建立空的单向链表;
2) 将链表传递给建立单选按钮的函数;
3) 将单选钮添加到容器中;
4) 显示单选钮;
5) 得到从单选钮中返回的链表.
发表于 2003-12-3 03:09:28 | 显示全部楼层
为每个radio_button写出g_singal_connect().可调用同一callback函数,传递的参数gpointer user_data不同不就可以判断了吗.
回复

使用道具 举报

发表于 2003-12-3 12:32:14 | 显示全部楼层
gtk_signal_connect(GTK_OBJECT(xxxx),"toggled",GTK_SIGNAL_FUNC(youcallback),gpointer data);
回复

使用道具 举报

发表于 2003-12-3 23:37:58 | 显示全部楼层
gtk_signal_connect() is deprecated and should not be used in newly-written code. Use g_signal_connect() instead.
using radio_button is better here, not toggle_button, so singal_name should be "released" , not "toggled".
回复

使用道具 举报

 楼主| 发表于 2003-12-4 16:21:53 | 显示全部楼层
问题的关键是:radio的建立是在一个函数中,按钮对应的信号连接函数也同在这个函数中.每调用一次这个函数,就新建一个radio.这样一组radio都对应同样的callback函数.而我目的是让每个按钮对应不同的callback.
回复

使用道具 举报

发表于 2003-12-4 20:58:31 | 显示全部楼层
void func1 (GtkWidget *widget, gpointer user_data) {
  NULL;
}
void func2 (GtkWidget *widget, gpointer user_data) {
  NULL;
}
GtkWidget* create_radio (GtkWidget *widget, const gchar* user_data) {
  return (gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (widget),
user_data));
}
void unnamed() {
   GtkWidget *box;
   GtkWidget *radio1;
   GtkWidget *radio2;
   box = gtk_hbox_new (TRUE, 2);
   radio1 = gtk_radio_button_new (NULL);
   radio2 = create_radio (radio1,"I'm radio2");
   gtk_box_pack_start (GTK_BOX (box), radio1, TRUE, TRUE, 2);
   gtk_box_pack_start (GTK_BOX (box), radio2, TRUE, TRUE, 2);
   g_singal_connect (G_OBJECT (radio1), "released", G_CALLBACK (func1), NULL);
   g_singal_connect (G_OBJECT (radio2), "released", G_CALLBACK (func2), NULL);
}
你把创建函数中的信号连接部分移到外部不就得了.
回复

使用道具 举报

 楼主| 发表于 2003-12-7 11:47:20 | 显示全部楼层
我现在想到一个好的方法,把回调函数作为参数传进来:
void unnamed(void *call_function()) {
GtkWidget *box;
GtkWidget *radio;
box = gtk_hbox_new (TRUE, 2);
radio = gtk_radio_button_new (NULL);
gtk_box_pack_start (GTK_BOX (box), radio, TRUE, TRUE, 2);
g_singal_connect (G_OBJECT (radio), "released", G_CALLBACK ((void *)&callback_function), NULL);

}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-9 05:49 , Processed in 0.040012 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表