在gtk中绘制点/线.C++

Drawing a point/line in gtk. C++

本文关键字:C++ 绘制 gtk      更新时间:2023-10-16

嘿,我正在用c++编写一个有绘图区的程序。我需要能够检测绘图区域的鼠标信号,并在这些位置绘制点。我该怎么做?没有多少论坛可以帮助这些东西,文档也不清楚。有人能帮帮我吗?

gtk3应用程序中的绘图是响应"draw"信号完成的。将回调函数连接到"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;
}

现在,为了处理鼠标点击,您需要将另一个回调函数连接到"按钮按下事件":

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

请参阅绘图区域参考文档中的一个小示例,以及绘图区域演示中的完整应用程序。

将gtkmm与C++结合使用,这是最好的选择。大多数事件都可以通过重载特定的虚拟方法来捕获。对于鼠标按压,可以重载on_button_press_event方法。gtkmm.org上的教程还不错(对于开源教程来说),您可以通过阅读基础知识并根据需要查看其他感兴趣的章节来获得良好的开端。