首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将TAB连接到gtkEntry

将TAB连接到gtkEntry
EN

Stack Overflow用户
提问于 2011-12-15 17:19:59
回答 2查看 993关注 0票数 0

如何使Tab键在GtkEntry中充当Enter键?我能够在信号“激活”的情况下抓住“回车”键。我怎样才能抓住GtkEntry的“tab”键?

代码语言:javascript
运行
复制
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键时,我如何得到通知?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-15 20:37:51

您可以为"key-press-event""key-release-event"注册条目,并在事件回调中检查GdkEventKey的键值。您可以使用gdkkeysyms.h中定义的宏来检查"Tab“或"Enter",它们位于以下行:

代码语言:javascript
运行
复制
...
#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);
...

希望这能有所帮助!

票数 1
EN

Stack Overflow用户

发布于 2011-12-18 21:37:23

这通常不是一个好主意,因为tab是用来改变应用程序的焦点的。请记住,让应用程序在没有鼠标的情况下可用是很重要的,在GtkEntry中使用tab来做其他事情,而不是改变焦点,这将使这一点变得更加困难,甚至是不可能的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8517713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档