2013-06-28 4 views
2

Я разрабатываю приложение с C++ и GTK3, но я застрял. Я создал визуальное приложение с поляной, имеющей три столбца, а один из них, средний, - DrawingArea. В этой DrawingArea я хочу нарисовать несколько кругов в той точке, которую я хочу, после нажатия кнопки, и в этом круге есть разные события мыши (например, перетаскивание, двойной щелчок, правый клик ...). Я сделал первую вещь (нарисую круг после нажатия кнопки), следуя official documentation, но проблема в том, что я не знаю, как делать события мыши, но я подумал об этом, и у меня есть несколько разных решений (I не знаю, если они являются BESTS решения или, возможно, есть и лучше):События мыши в контексте cairo

  1. Я думаю, что лучший способ для создания сигнала к контексту cairomm, но я ничего не видел, чтобы сделать это. Может быть, путь был бы создать поверхность Каира или что-то в этом роде.

  2. Каждый раз, когда я нажимаю для создания круга, мне нужно будет создать виджет gtk, в котором я могу обрабатывать события мыши. Проблема здесь в том, что виджет должен иметь круглую форму и должен быть доступен. Можно ли создать круговую чертежную линию? Это может быть лучше. Я видел способ создания пользовательских виджетов here.

  3. Использование goocanvasmm. Проблема здесь в том, что goocanvasmm имеет небольшую документацию (извините, что не могу опубликовать более двух ссылок из-за моей репутации), и я думаю, что это не лучшее решение, я предпочитаю использовать cairomm.

Это приложение было написано в C с помощью GTK2 и кружки были нарисованы с помощью gnomecanvas, добавляя сигналы в легком пути к каждой окружности; и теперь я перемещаю это приложение на C++ и GTK3, чтобы обновить его.

Я очень новичок в GTK (и графических интерфейсах в целом), но я искал решения в течение нескольких часов, и я не знаю, что является лучшим способом для продолжения моей работы.

Спасибо за вашу помощь :)

ответ

0

Лучше всего использовать библиотеку холста для этого, таких как GooCanvas. Выполнение этого только с помощью cairo потребует, чтобы вы прослушивали события мыши на всей области рисования и отслеживали, где были круги, чтобы определить, к какому кругу относится событие мыши - именно та проблема, которую уже решена библиотека холста для вы.

Если у вас возникли проблемы с документацией goocanvasmm, обычно будет достаточно взглянуть на documentation for GooCanvas' C API в сочетании со знанием того, как C API переводится на C++. Хотя GooCanvasmm documentation кажется довольно обширным для меня.

+0

Спасибо, ptomato! Я забыл опубликовать здесь, что, наконец, я делаю это с goocanvasmm; это лучшее, простое и практичное решение :) – bmenendez

+2

Для читателей, которые видят этот ответ после 2015 года, библиотека goocanvas больше не поддерживается ... К сожалению. – Oz123