我希望在我的程序中捕获按键,但遇到了困难。
GtkEventControllerKey
换成了 GtkEventKey
,我知道这是现在正确的方法。这是我的代码:
void on_window_main_key_press_event(GtkWidget *widget, GtkEventControllerKey *key, gpointer user_data) {
guint TheKeyThatWasPressed = key->keyval;
}
这会产生错误:
error: invalid use of incomplete typedef ‘GtkEventControllerKey’ {aka ‘struct _GtkEventControllerKey’}
147 | guint TheKeyThatWasPressed = key->keyval;
include <gtk/gtk.h>
static gboolean on_key_pressed(GtkEventControllerKey *controller,`
guint keyval,
guint keycode,
GdkModifierType state,
gpointer user_data)
{
gunichar unicode = gdk_keyval_to_unicode(keyval);
gchar *letter = g_ucs4_to_utf8(&unicode, 1, NULL, NULL, NULL);
g_print("kayval: %u\n", keyval);
g_print("keycode: %u\n",keycode);
g_print("letter pressed: %s\n", letter);
g_free(letter);
return GDK_EVENT_PROPAGATE;
}
static void
activate (GtkApplication *app,
gpointer user_data)
{
GtkWidget *window;
window = gtk_application_window_new (app);
gtk_window_set_title (GTK_WINDOW (window), "Window");
gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
GtkEventController* keyevent = gtk_event_controller_key_new ();
gtk_widget_add_controller(window,keyevent);
g_signal_connect(keyevent,"key-pressed",G_CALLBACK(on_key_pressed),NULL);
gtk_window_present (GTK_WINDOW(window));
}
int
main (int argc, char **argv)
{
GtkApplication *app;
int status;
app = gtk_application_new ("org.gtk.example", G_APPLICATION_DEFAULT_FLAGS);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
return status;
}