Идентификатор «GdkEventKey» не определен C/C++(20)C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Идентификатор «GdkEventKey» не определен C/C++(20)

Сообщение Anonymous »


это мой код на C++ и GTK-4. Я пытаюсь создать простое приложение таймера, которое может прослушивать глобальные и локальные сочетания клавиш, когда мы блокируем экран, и останавливать таймер на основе этого, работая в Linux Pop! ОС 22

#include #include #include #include #include использование пространства имен std; Guint TimerID = 0; хронограф::steady_lock::time_point timePoint; GtkWidget *label; недействительный старттаймер() { если (ID таймера!= 0) { gtk_label_set_text(GTK_LABEL(label), «Таймер уже работает»); } еще { gtk_label_set_text(GTK_LABEL(метка), «Таймер запущен»); timePoint = хроно::steady_lock::now(); timerID = g_timeout_add( 1000, [](gpointer userData) -> gboolean { auto now = Chronic::steady_lock::now(); auto diff = Chronic::duration_cast(сейчас - timePoint); gtk_label_set_text(GTK_LABEL(label), (to_string(diff.count()) + "секунды сейчас!").c_str()); вернуть G_SOURCE_CONTINUE; }, нульптр); } } недействительный стопТаймер() { если (ID таймера!= 0) { g_source_remove (ID таймера); идентификатор таймера = 0; gtk_label_set_text(GTK_LABEL(label), «Таймер не работает»); } еще { gtk_label_set_text(GTK_LABEL(label), «Таймер не работает»); } } статический gboolean onKeyPress (GtkWidget *widget, GdkEventKey *event, gpointer userData) { if (GDK_CONTROL_MASK && gdk_key_event_get_keyval(event) == GDK_KEY_Escape) { g_print("Нажата клавиша Ctrl + ESC\n"); } вернуть ИСТИНА; } void applyStyle(GtkWidget *widget, const char *style) { GtkStyleContext *context = gtk_widget_get_style_context(виджет); GtkCssProvider *provider = gtk_css_provider_new(); gtk_css_provider_load_from_data (поставщик, стиль, -1); gtk_style_context_add_provider(контекст, GTK_STYLE_PROVIDER(поставщик), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); g_object_unref (поставщик); } static void active (GtkApplication *app, gpointer userData) { GtkWidget *окно; GtkWidget *box; GtkWidget *button; GtkWidget *сетка; окно = gtk_application_window_new (приложение); gtk_window_set_title(GTK_WINDOW(окно), «Таймер»); gtk_window_set_default_size (GTK_WINDOW (окно), 800, 350); g_signal_connect(окно, "событие нажатия клавиши", G_CALLBACK(onKeyPress), nullptr); поле = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10); gtk_widget_set_halign (коробка, GTK_ALIGN_CENTER); gtk_widget_set_valign (поле, GTK_ALIGN_CENTER); gtk_window_set_child (GTK_WINDOW (окно), коробка); // кнопка = gtk_button_new_with_label("Начать"); // g_signal_connect(кнопка, "нажата", G_CALLBACK(printHelloWorld), nullptr); // g_signal_connect_swapped(кнопка, "нажата", G_CALLBACK(gtk_window_close), nullptr); // gtk_box_append(GTK_BOX(box), button); сетка = gtk_grid_new (); gtk_grid_set_row_spacing (GTK_GRID (сетка), 10); gtk_grid_set_column_spacing (GTK_GRID (сетка), 10); // gtk_window_set_child(GTK_WINDOW(окно), сетка); gtk_box_append (GTK_BOX (коробка), сетка); label = gtk_label_new("Таймер не работает"); gtk_grid_attach (GTK_GRID (сетка), метка, 0, 0, 2, 1); кнопка = gtk_button_new_with_label("Пуск"); applyStyle(button, "button { фон: зеленый; цвет: белый; } button:active { фон: темно-зеленый; }"); g_signal_connect(кнопка, "нажата", G_CALLBACK(startTimer), nullptr); gtk_grid_attach(GTK_GRID(сетка), кнопка, 0, 1, 1, 1); button = gtk_button_new_with_label("Стоп"); applyStyle(button, "button { фон: огнеупорный кирпич; цвет: белый; } button:active { фон: темно-красный; }"); g_signal_connect(кнопка, "нажата", G_CALLBACK(stopTimer), nullptr); gtk_grid_attach(GTK_GRID(сетка), кнопка, 1, 1, 1, 1); gtk_window_present (GTK_WINDOW (окно)); } int main(int argc, char **argv) { GtkApplication *приложение; международный статус; приложение = gtk_application_new("org.nhrdev.timer", G_APPLICATION_FLAGS_NONE); g_signal_connect (приложение, «активировать», G_CALLBACK (активировать), nullptr); статус = g_application_run(G_APPLICATION(приложение), argc, argv); g_object_unref (приложение); статус возврата; } пытаюсь добавить прослушиватель key-press-event в приложение, но VS Code показывает эту ошибку, даже компилятор тоже


Изображение


вот мой c_cpp_properties.json

{ "конфигурации": [ { "имя": "Линукс", "compilerPath": "/usr/bin/g++-12", "includePath": [ "${workspaceFolder}/**", "/usr/include/gtk-4.0", "/usr/include/gtk-4.0/gdk", "/usr/include/glib-2.0", "/usr/lib/x86_64-linux-gnu/glib-2.0/include", "/usr/include/pango-1.0", "/usr/include/harfbuzz", "/usr/include/каир", "/usr/include/atk-1.0", "/usr/include/gdk-pixbuf-2.0", "/usr/include/графен-1.0", "/usr/lib/x86_64-linux-gnu/graphene-1.0/include" ], "определяет": [], "cppStandard": "gnu++23", "intelliSenseMode": "linux-gcc-x64", "обзор": { "путь": [ "/usr/включить" ] } } ], "версия": 4 } Я пытался найти решение в Chat-GPT, Bard, но никто не смог предоставить работающего решения
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»