Рисование точки / линии в gtk.C ++ - PullRequest
0 голосов
/ 15 февраля 2012

Привет, я использую c ++ для написания программы с областью рисования. Мне нужно, чтобы можно было обнаружить сигналы мыши из области рисования и рисовать точки в этих местах. Как я могу это сделать? Есть не так много форумов, которые помогают с этим, и документация не ясна. Может кто-нибудь помочь мне?

Ответы [ 2 ]

4 голосов
/ 15 февраля 2012

Рисование в приложении gtk3 выполняется в ответ на сигнал «рисовать». Вы подключаете функцию обратного вызова к сигналу «draw», и когда gtk + необходимо перерисовать окно, вызывается ваш обратный вызов.

g_signal_connect (drawingarea, "draw",
                  G_CALLBACK (draw_cb), NULL);

Обратный вызов выглядит примерно так:

static gboolean
draw_cb (GtkWidget *widget,
         cairo_t   *cr,
         gpointer   data)
{
  // do your drawing on the provided cairo_t
  // ...

  return FALSE;
}

Теперь, чтобы обрабатывать щелчки мыши, вам нужно подключить другую функцию обратного вызова к «button-press-event»:

g_signal_connect (drawingarea, "button-press-event",
                  G_CALLBACK (button_press_event_cb), NULL);

См. Справочные документы для области рисования для небольшого примера и демонстрационную область для рисования для полного применения.

1 голос
/ 15 февраля 2012

Используйте gtkmm с C ++, это лучший вариант.Большинство событий могут быть перехвачены путем перегрузки определенного виртуального метода.Для нажатия мышью вы перегружаете метод on_button_press_event.Учебное пособие на gtkmm.org не так уж плохо (для обучающих программ с открытым исходным кодом, которые есть), вы можете получить хорошее начало, читая об основах и рассматривая другие интересующие главы по мере необходимости.

...