嘿我用c ++编写一个有绘图区的程序。我需要能够从绘图区域检测鼠标信号并在这些位置绘制点。我怎样才能做到这一点?没有很多论坛可以帮助解决这个问题,文档也不清楚。有人可以帮帮我吗?
答案 0 :(得分:4)
在gtk3应用程序中绘制是为了响应“绘制”信号。您将回调函数连接到“绘制”信号,当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);
有关小样本,请参阅drawing area reference docs,完整申请请参阅drawing area demo。
答案 1 :(得分:1)
在C ++中使用gtkmm,这是最好的选择。可以通过重载特定的虚拟方法来捕获大多数事件。对于鼠标按下,您会重载on_button_press_event
方法。 gtkmm.org上的教程也不错(对于开源教程),您可以通过阅读基础知识并根据需要查看其他感兴趣的章节来获得良好的开端。