2011-12-15 35 views
0

如何使Tab键在GtkEntry中作为Enter键行为? 我能够在信号“已激活”的情况下捕捉“输入”键。我怎样才能抓住GtkEntry的'tab'键?将Tab连接到gtkEntry

static void enter(GtkWidget *widget, GtkWidget *entry) 
{ 
    const gchar *entry_text; 
    entry_text = gtk_entry_get_text(GTK_ENTRY(entry)); 
    printf("Entry contents: %s\n", entry_text); 
} 

entry = gtk_entry_new(); 
g_signal_connect(entry, "activated", G_CALLBACK(enter), entry); 

以同样的方式,我怎样才能得到通知时,按Tab键?

回答

1

您可以注册条目"key-press-event""key-release-event",并在事件回调中检查关键值GdkEventKey。你可以在gdkkeysyms.h定义检查“标签”或“Enter”键使用宏,一些在这些线路上:

... 
#include <gdk/gdkkeysyms.h> 
... 
static gboolean 
key_press_cb(GtkWidget *w, GdkEvent *ev, gpointer data) 
{ 
    (void)w; (void)data; /* To avoid compiler warnings */ 
    GdkEventKey *key = (GdkEventKey*)ev; 
    if(key) /* Extra check maybe redundant */ 
    { 
     if(key->keyval == GDK_Tab) 
      printf(" Tab pressed\n"); 
     else if (key->keyval == GDK_Return) 
       printf(" Enter pressed\n"); 
    } 
    /* Default handling of "Tab" is change of focus. 
    * If TRUE is passed here, the event will not be propagated 
    */ 
    return FALSE; 
} 
... 
    entry = gtk_entry_new(); 
    g_signal_connect(entry, "key-press-event", G_CALLBACK(key_press_cb), NULL); 
... 

希望这有助于!

+0

感谢您的回复.. :)它能够抓住标签键,但我无法输入文本到该条目中.... – Dinesh 2011-12-22 14:06:01

1

这通常是一个坏主意,因为选项卡用于更改应用程序的焦点。请记住,让应用程序在没有鼠标的情况下可以使用是非常重要的,使用GtkEntry中的选项卡除了改变焦点外将会使得更难,甚至不可能。