В 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);

Как в этом примере:

http://zetcode.com/gfx/cairo/basicdrawing/

Полный пример: https://developer.gnome.org/gtk3/stable/ch01s05.html

Он демонстрирует обработку входных событий с помощью обработчиков::button-press и::motion-notify.

Другие вопросы по тегам