用GTK创建逻辑门模拟器,如何制作放置区域?

时间:2018-07-19 13:10:17

标签: c++ linux user-interface gtk

使用GTK接口创建逻辑门模拟器

如何设置门的放置区域?

我想使用GTK来受益于系统接口集成,但是我不知道如何为该放置区域制作小部件。在该区域,我们应该能够放置门,将它们连接在一起,缩放,移动视图,选择,编辑,删除门等...

名为GtkFixed的窗口小部件可以自由接收其他窗口小部件,并且可以处理有关编辑,选择等的信号。...喜欢我想要的编辑区域。但是我不知道这是我想要的是什么。

所以,我的问题如下:

  • 是否有关于我想做什么的文档?
  • 我是使用此GtkFixed小部件在正确的方向上吗?
  • 如果没有,我应该使用什么? (也许是GtkDrawingArea小部件?)

编辑:经过更多研究,它看起来像我需要的是GtkDrawingArea,但是使用cairo库就像试图用锤子杀死苍蝇。

1 个答案:

答案 0 :(得分:0)

要使用的小部件是Gtk::DrawingArea

步骤:

  • 创建一个继承自Gtk::DrawingArea的类。
  • 通过在继承的类中声明一个bool on_draw(const Cairo::RefPtr<Cairo::Context>& cr);方法来覆盖默认的图形处理程序。
  • 在此功能中,使用Cairo::Context渲染任何内容,这里是documentation
  • Gtk会在每次必要时调用此方法,但可以通过调用queue_draw()的{​​{1}}方法来强制使用此方法。
  • 鼠标,键盘和其他类型的事件可以通过重写事件处理程序或将自定义函数连接到信号来进行处理。
  • 要接收事件类型,必须使用DrawingArea方法设置一个标志。对于键盘事件,add_events(eventTypeFlag)小部件必须抓住焦点。

示例:

DrawingArea

文档: