LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 784|回复: 0

GTK+中将加速键与信号关联不成功(提示莫名错误),请求解答。

[复制链接]
发表于 2005-10-24 18:15:59 | 显示全部楼层 |阅读模式
//代码创建了一个对话框,并且在对话框里创建了一个label为“press me”的按钮
//将F1键与"clicked"信号进行关联
#include <gtk/gtk.h>
#include <stdio.h>
#include <gdk/gdkkeysyms.h>

static void
ClickedCallback(GtkWidget *widget,GtkWidget *dialog_window)
{
  fprintf(stderr,"In ClickedCallback\n");
  fflush(stderr);
}

static void
DestroyCallback(GtkWidget *widget,GtkWidget *dialog_window)
{
  fprintf(stderr,"In DestroyCallBack\n");
  fflush(stderr);
  gtk_main_quit();
}

int
main(int argc,char *argv[])
{
  GtkWidget *button,*dialog_window;
  GtkAccelGroup *accel_group;
  
  accel_group=gtk_accel_group_new();
  
  gtk_init(&argc,&argv);

  dialog_window=gtk_dialog_new();
  gtk_window_position(GTK_WINDOW(dialog_window),GTK_WIN_POS_MOUSE);
  
  button=gtk_button_new_with_label("ress me!");

  //The last two lines may now work with the gtk+ 2.6.10
  //gtk_accel_group_attach(GTK_WINDOW(dialog_window),accel_group);
  gtk_window_add_accel_group(GTK_WINDOW(dialog_window),accel_group);
  gtk_widget_add_accelerator(button,"clicked",accel_group,GDK_F1,0,
                             GTK_ACCEL_LOCKED);

  GTK_WIDGET_SET_FLAGS(button,GTK_CAN_DEFAULT);
  gtk_window_set_default(GTK_WINDOW(dialog_window),button);
  gtk_box_pack_start(GTK_BOX (GTK_DIALOG(dialog_window)->action_area),
                     button,TRUE,TRUE,0);

  gtk_signal_connect(GTK_OBJECT(button),"clicked",
                       GTK_SIGNAL_FUNC(ClickedCallback),button);

  gtk_signal_connect(GTK_OBJECT(button),"destroy",
                     GTK_SIGNAL_FUNC(DestroyCallback),button);

  gtk_widget_show_all(dialog_window);
  gtk_main();
}
=========================================
程序运行后,发现按F1无法产生预期的"clicked"信号,由于参考书中为GTK+1.X的版本,以上代码中,我修改了一部分为GTK+2.X具有的函数,按理说应当可以的,但不知道为什么却没有成功。
附:
程序运行时TERMINAL上有如下提示:
[asnoka@dolgel gtkdev]$ ./accel

(process:3335): GLib-GObject-CRITICAL **: gtype.c:2254: initialization assertion failed, use IA__g_type_init() prior to this function

(process:3335): GLib-GObject-CRITICAL **: g_object_new: assertion `G_TYPE_IS_OBJECT (object_type)' failed

(accel:3335): Gtk-CRITICAL **: gtk_window_add_accel_group: assertion `GTK_IS_ACCEL_GROUP (accel_group)' failed

(accel:3335): Gtk-CRITICAL **: gtk_widget_add_accelerator: assertion `GTK_IS_ACCEL_GROUP (accel_group)' failed
==============================================
请兄弟们帮忙看一下,谢谢大家了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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