You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

gtkmm 3.0:如何触发DrawingArea重绘(无需传递Cairo上下文)

解决方案

1. 无需Cairo上下文触发重绘的方法

直接调用Anzeige实例的queue_draw()方法即可,这就是点击DrawingArea时自动重绘的底层触发命令。调用这个方法后,Gtk会自动安排重绘流程,在合适的时机创建Cairo上下文并调用你的on_draw方法,完全不需要你手动传递上下文。

比如当t_Elt_IST或t_Elt_SOLL更新后,执行:

your_anzeige_instance->queue_draw();

这样系统就会自动触发on_draw,用最新的数值完成绘制。

2. Cairo上下文的使用时机

  • 由Gtk自动提供上下文的场景:绝大多数常规绘制都应该依赖on_draw方法里的cr参数。这个上下文是Gtk在重绘周期中为当前控件创建的,已经正确关联了控件的绘图区域、窗口表面等状态,直接用它调用zeigeTemp这类绘制方法是安全且正确的。
  • 自行创建上下文的场景:只有当你需要做离线渲染(比如绘制到内存中的Cairo表面,保存为图片),或者在非重绘周期进行临时绘制时,才需要自己创建Cairo上下文。Gtk::Window::create_cairo_context容易出错是因为该方法要求窗口已经完成映射(即显示在屏幕上),且需要正确的绘制目标,一般业务场景下完全不需要这么做。

你之前尝试手动创建上下文导致段错误,就是因为没有满足该方法的调用条件,而实际上你根本不需要这么做——更新数值后调用queue_draw让系统处理上下文和重绘流程就足够了。

内容的提问来源于stack exchange,提问作者bejo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 08:10:22