无法在Gtk绘图区绘制开罗
Unable to paint on Gtk drawing_area with Cairo
我正试图用cairo
在Gtk
的drawing_area
上绘制一个点。我有两个函数,do_drawing
函数用于在draw
信号上绘制背景,第二个函数do_drawPoint
用于绘制点。
void painter::do_drawing(cairo_t *cr)
{
cairo_set_source_rgb(cr, 1, 1, 1);
cairo_paint(cr);
}
void painter::do_pointDraw(cairo_t *cr)
{
cairo_set_source_rgb(cr, 0, 0, 0);
cairo_arc(cr, 150, 150, 10, 0, 2 * M_PI);
cairo_fill(cr);
}
现在,每当用户单击drawing_area
时,就会调用drawPoint
函数。
void drawingArea::drawPoint()
{
g_signal_connect(area, "button-press-event",
G_CALLBACK(clicked), NULL);
std::cout<<"drawPoint"<<std::endl;
}
gboolean clicked(GtkWidget *widget, GdkEventButton *event, cairo_t *cr,
gpointer user_data)
{
if (event->button == 1) {
x = event->x;
y = event->y;
}
std::cout<<x<<" and "<<y<<std::endl;
ptr->do_pointDraw(cr);
gtk_widget_queue_draw(widget);
}
return TRUE;
}
但在打印了x
和y
的值后,程序因分段故障而终止。
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff74ac3ae in cairo_set_source_rgb ()
是什么原因造成的?我的操作是否正确?
很难阅读代码(有破损的缩进,只提供了片段(,但需要注意的是:
button-press-event
处理程序签名不正确。cairo上下文不存在- 绘图只能在GtkDrawingArea的
draw
信号处理程序内部进行。Cairo并不是按按钮绘制的:用户交互应该改变应用程序的状态,绘制处理程序应该根据当前应用程序状态进行绘制 - CCD_ 13处理程序连接在CCD_ 14内部。这听起来很不对
我建议您尝试阅读DrawingArea文档,从它给出的简单示例开始,然后在可行时开始添加更复杂的内容。
相关文章:
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- QuadTree只在窗口的右上角绘制
- 绘制旋转的三角形
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 如何在QT中的自定义视频小工具t上绘制矩形
- 如何在Visual Basic中使用矩形函数OpenGL绘制矩形
- 无法使用VAO和EBO(openGL)绘制多个对象
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 绘制顺时针三角形,重新排序点
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- OpenGL:使用实例化绘图与我正在绘制的帧缓冲进行绘制
- 在绘制信号上保留绘图区域"图像"
- 在 win32 中调用WM_PAINT之间保留绘制的工作区
- 如何使用 SDL 2 和 C++ 绘制椭圆的填充扇区
- 在 qt 中绘制图形和自定义绘图库绘制曲线
- 在绘图中缩放已绘制的 QPolygonF
- 在gtk绘图区域中单击时选择绘制的线
- 为什么我的非所有者绘制的列表框在添加字符串后会出现绘图问题
- 无法在Gtk绘图区绘制开罗
- GTKMM::在GTk::绘图区域使用单个Gdk::PixBuf绘制多个图像