|
|
//代码创建了一个对话框,并且在对话框里创建了一个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
==============================================
请兄弟们帮忙看一下,谢谢大家了。 |
|