c - gtk+ 3.x 键绑定(bind) - 苦苦挣扎

标签 c gtk

我已经尝试了一些事情并且可能接近解决方案但是这里......

在一个(可能实现的)小部件上,有没有人有一个很好的例子来说明 GtkEntry 小部件接收 ALT+ DownCTRL + n 按键,这将增加 一个"new"信号,例如SIG-NEW 在小部件上。我知道如何用 g_signal_connect 捕捉。

最佳答案

我附加了一个最小的工作示例。

重点是将 GtkEntry 实例的 key-press-event 连接到合适的回调。在该回调中,您必须提取作为回调函数参数的 GdkEvent 结构成员的 GdkEventKey 结构。

GdkEventKey 包含检查按下哪个键+修饰符所需的所有信息。

由于我使用 gtk+-3.0 测试了代码,您可能需要修改小部件的 GdkEventMask 以接收 key-press-event的。 gtk+-3.0 似乎已经是默认设置了。如果未调用回调,您应该使用 gdk_window_set_events () 启用它(当然您必须在小部件的 gdk 窗口上调用它)。

#include <gtk/gtk.h>
#include <glib.h>

gboolean
key_press_event_cb (GtkWidget * widget, GdkEvent * event,
                    gpointer data)
{
    GdkEventKey key = event->key;

    /* check modifier key */
    /* on most keyboards GDK_MOD1_MASK is the Alt key */
    if (key.state == GDK_MOD1_MASK) {

        /* check for key that was pressed */
        switch (key.keyval) {
            case GDK_KEY_d:
                g_print
                    ("`Alt-d` deletes the content in the entry box\n");
                gtk_entry_set_text (GTK_ENTRY (widget), "");
                break;
        }

    }

    /* check for unmodified key presses */
    switch (key.keyval) {
        case GDK_KEY_x:
            g_print
                ("`x` deletes the content in the entry box\n");
            gtk_entry_set_text (GTK_ENTRY (widget), "");
            return TRUE;
            break;
    }

    return FALSE;
}

int
main (int argc, char *argv[])
{
    GtkWidget *window;
    GtkWidget *entry;

    gtk_init (&argc, &argv);

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    entry = gtk_entry_new ();

    gtk_container_add (GTK_CONTAINER (window), entry);
    gtk_widget_show_all (window);

    g_signal_connect (window, "destroy",
                      G_CALLBACK (gtk_main_quit), NULL);
    g_signal_connect (entry, "key-press-event",
                      G_CALLBACK (key_press_event_cb), NULL);

    gtk_main ();

    return 0;
}

关于c - gtk+ 3.x 键绑定(bind) - 苦苦挣扎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17886621/

相关文章:

c - 减去十六进制

单声道 gtk Hello World 失败, 'Missing method'

python - GtkTreeView的限制高度

python - 线程卡住(python w/GTK)

gtk - 如何将键盘焦点赋予弹出的 Gtk.Window

c - 使用指针传递结构时未声明的标识符

c - C 中的简单头文件可见性混淆

c - 名为 'unix' 的变量的值为 1

c - 在 OpenCl 内核中使用指针

c - GtkApplication 和 gtk_init 有什么区别?