В GTK+3, как я могу получить рисунок области, чтобы реагировать на события мыши?
В GTK+3, как я могу получить draw_area для ответа на события мыши?
В функции main() я объявил мой Drawing_area:
GtkWidget *drawing_area;
Затем я связал Drawing_area с сигналом щелчка мыши:
g_signal_connect(drawing_area, "button-press-event", G_CALLBACK(clicked), NULL);
функция "нажал" определяется:
static gboolean clicked(GtkWidget *widget, GdkEventButton *event, gpointer user_data)
printf("Clicked! \n");
return TRUE;
}
Программа запускается и показывает Drawing_area, но когда я нажимаю на нее, нет ответа, ничего не происходит! Почему это происходит?
2 ответа
Похоже, что GtkDrawingArea не может получать события мыши по умолчанию
Посмотрите документацию:
Чтобы получать события мыши в области рисования, вам нужно включить их с помощью gtk_widget_add_events(). Чтобы получать события клавиатуры, вам нужно установить свойство can-focus в области рисования, и вам, вероятно, следует нарисовать какой-то видимый для пользователя признак того, что область рисования сфокусирована. Используйте gtk_widget_has_focus() в обработчике события expose, чтобы решить, следует ли рисовать индикатор фокуса. Смотрите gtk_render_focus() для одного способа рисования фокуса.
Или попробуйте подключить событие "button-press-event"
к окну:
g_signal_connect(window, "button-press-event", G_CALLBACK(clicked), NULL);
вместо
g_signal_connect(drawing_area, "button-press-event", G_CALLBACK(clicked), NULL);
Как в этом примере:
Полный пример: https://developer.gnome.org/gtk3/stable/ch01s05.html
Он демонстрирует обработку входных событий с помощью обработчиков::button-press и::motion-notify.