C++ 绘制区域并显示事件

C++ 绘制区域并显示事件,c++,gtk,gtkmm,C++,Gtk,Gtkmm,我有一个包含绘图区域的对话。如果对话被放大、缩小、隐藏和暴露,我希望重新绘制绘图区域的内容,这是绘图区域的正常和自然现象。为此,我创建了一个方法 bool on_expose_event (GdkEventExpose *event); 在课堂上。但是这个事件的出现阻止了对话框上所有其他小部件的正确绘制;据推测,当它们被公开时,它也会被调用。如何创建一个只刷新绘图区域的函数,而让所有其他小部件自行处理?您应该真正将Gtk::DrawingArea类划分为子类,并从该类中实现on_expose_

我有一个包含绘图区域的对话。如果对话被放大、缩小、隐藏和暴露,我希望重新绘制绘图区域的内容,这是绘图区域的正常和自然现象。为此,我创建了一个方法

bool on_expose_event (GdkEventExpose *event);

在课堂上。但是这个事件的出现阻止了对话框上所有其他小部件的正确绘制;据推测,当它们被公开时,它也会被调用。如何创建一个只刷新绘图区域的函数,而让所有其他小部件自行处理?

您应该真正将Gtk::DrawingArea类划分为子类,并从该类中实现on_expose_event()函数。

此方法是绘图区域的成员还是对话框的成员?它是对话框的一部分。我可以看到如何将函数调用附加到特定小部件的信号上,但不公开事件。“bool on_expose_event(GdkEventExpose*event);“你不是说GtkEventExpose吗?这一部分是从代码中剪切粘贴的,所以这肯定是我所拥有的。这是否是我应该拥有的是另一回事。GdkEventExpose是正确的,而不是Gtk。我希望避免拥有两个类,因为它们之间的耦合将非常大。但是如果这是我必须要做的,那么这就是我必须要做的。好吧,你不必对绘图区域进行子类化,它通常是更干净的解决方案。如果您真的不想子类化,只需实现一个与对话框的虚拟函数名称不同的函数(称之为expose_drawing_area(),而不是on_expose_event()),然后将其连接到drawingarea.signal_expose_event()谢谢,jonner;我一定要试一试。