在GTK3中,如何获得DrawingArea来响应键盘事件?

时间:2019-07-07 09:38:14

标签: c gtk3 keyboard-events drawingarea

在GTK3中,如何获得DrawingArea来响应键盘事件? 我应该将DrawingArea与信号连接还是更复杂? 我正在使用C语言的GTK3。

2 个答案:

答案 0 :(得分:0)

首先,您需要在事件掩码中启用按键操作(可能还需要释放按键):

gtk_widget_add_events(my_drawing_area, 
                      GDK_KEY_PRESS_MASK|GDK_KEY_RELEASE_MASK);

然后您可以连接到信号:

g_signal_connect(my_drawing_area,"key-press-event", 
                 my_key_press,my_user_data);
g_signal_connect(my_drawing_area,"key-release-event",
                 my_key_release,my_user_data);

并定义一些这样的回调函数:

gboolean my_key_press(GtkWidget *widget,
                      GdkEventKey *event,
                      gpointer user_data)
{
    return FALSE;
}

gboolean my_key_release(GtkWidget *widget,
                        GdkEventKey *event,
                        gpointer user_data)
{
    return FALSE;
}

有关更多信息,请参见GtkWidgetGObject SignalsGdkEvent的文档。

答案 1 :(得分:0)

我终于找到了解决方法here。我只连接了信号,但是还需要为绘图区设置GTK_CAN_FOCUS。