将任何矩形绘制到 GTK+ DrawingArea 会填充整个 DrawingArea

Posted

技术标签:

【中文标题】将任何矩形绘制到 GTK+ DrawingArea 会填充整个 DrawingArea【英文标题】:Drawing any rectangle to a GTK+ DrawingArea fills the whole DrawingArea 【发布时间】:2011-01-25 15:59:06 【问题描述】:

我有一个 GTK+ DrawingArea,它应该在左上角显示一个矩形。当我使用 Cairo 绘制矩形时,整个绘图区域都填充了矩形的颜色。我怎样才能防止这种情况?开罗为什么要这样做?我做错了什么?

#include <gtkmm.h>

class Window : public Gtk::Window

  private:
    Gtk::DrawingArea area;

    bool on_area_expose(GdkEventExpose* event)
    
      Gtk::Allocation allocation = area.get_allocation();
      Cairo::RefPtr<Cairo::Context> context =
          area.get_window()->create_cairo_context();
      int width = allocation.get_width();
      int height = allocation.get_height();
      context->set_source_rgba(0, 0, 0, 1);
      context->rectangle(0, 0, double(width)/10, double(height)/10);
      context->paint();
      return true;
    

  public:
    Window() : Gtk::Window()
    
      area.signal_expose_event().connect(
        sigc::mem_fun(*this, &Window::on_area_expose));
      add(area);
    
;

int main(int argc, char* argv[])

  Gtk::Main app(argc, argv);
  Window window;
  window.show_all();
  Gtk::Main::run(window);
  return 0;

我使用

编译了代码
g++ gtktest.cpp `pkg-config --libs --cflags gtkmm-2.4` -o gtktest

【问题讨论】:

【参考方案1】:

context-&gt;paint() 绘制当前源当前剪辑区域内的所有位置。正确的调用方法是Gtk::Context::fill

【讨论】:

以上是关于将任何矩形绘制到 GTK+ DrawingArea 会填充整个 DrawingArea的主要内容,如果未能解决你的问题,请参考以下文章

在 Gtk::DrawingArea 中添加和定位小部件

显示尽可能大的所有小部件

如何使用 GTK3 和 PyGObject 绘制 GdkPixbuf

从opencv读取时gtkmm DrawingArea分段错误

如何在 Gtk3 中在开罗上下文中使用 Skia 绘制

使用 Cairo 的 Ruby Gtk3 内存泄漏