我已经尝试了一些事情并且可能接近解决方案但是这里......
在一个(可能实现的)小部件上,有没有人有一个很好的例子来说明
GtkEntry
小部件接收 ALT+ Down 或 CTRL + 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/