我正在尝试编译一个使用 cairomm 进行绘图的 gtkmm 应用程序。 它使用 gtkmm3.0 编译得很好,但是当我尝试使用 gtkmm2.4 编译它时,我得到:
error: ‘signal_draw’ was not declared in this scope
我正在使用 g++。
gtkmm2.4好像没有signal_draw(我错了吗?)。有什么函数/信号可以代替吗?
提前致谢。
抱歉我的英语不好。
部分代码:
class egclass: public Gtk::DrawingArea
{
public:
egclass();
virtual ~egclass();
virtual bool on_draw(const Cairo::RefPtr<Cairo::Context>& cr);
};
egclass::egclass()
{
#ifndef GLIBMM_DEFAULT_SIGNAL_HANDLERS_ENABLED
signal_draw().connect(sigc::mem_fun(*this, &egclass::on_draw), false);
#endif
}
最佳答案
旧的 gtkmm 2.4 有 on_expose_event相反:
virtual bool on_expose_event(GdkEventExpose* event);
如果您需要为绘图创建一个 cairo 上下文,使用 GTK+ C API,它是这样的:
cairo_t *cr;
cr = gdk_cairo_create (event->window);
gdk_cairo_region (cr, event->region);
cairo_clip (cr);
/* do your drawing */
cairo_destroy (cr);
...将上面的代码片段翻译成 gtkmm 作为练习留给读者。
另请参阅以下链接:
关于c++ - Gtkmm2.4 中的 Signal_draw,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9193555/