将 TAB 连接到 gtkEntry

标签 c gtk

如何使 Tab 键在 GtkEntry 中充当 Enter 键? 我能够捕捉到“输入”键和“激活”信号。如何捕获 GtkEntry 的“tab”键?

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键时如何得到通知?

最佳答案

您可以注册"key-press-event"的条目或"key-release-event"并在事件回调中检查 GdkEventKey 的键值。您可以使用 gdkkeysyms.h 中定义的宏来检查“Tab”或“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);
...

希望这有帮助!

关于将 TAB 连接到 gtkEntry,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8517713/

相关文章:

c++ - printf 的 #%ld!\n 的每个元素是什么意思?

gtk - 如何扩展 Gtk 标签以填充整个水平空间?

c - GTK 默认文件->退出行为

使用 signal_connect 在 C 中更改 GTK 标签

c - 组织 ANSI C 项目的首选方法?

c++ - 用于空 Win32 项目的智能感知

c - 扫描不同类型的变量

c - 制作 : flex: Command not found

python - GTK:创建一个彩色的常规按钮

r - 通过在批处理文件中获取 R 脚本使其可执行