c - GTK 调整变量

标签 c gtk cairo gtk2

我正在使用 C、GTK+ 和 cairo 进行编码。我正在尝试使用 slider 来更改变量的值。这是我到目前为止所拥有的:

adj = (GtkAdjustment *) gtk_adjustment_new (300.0, -50.0, 500.0, 1.0, 1.0, 1.0);
scale = gtk_hscale_new (GTK_ADJUSTMENT (adj));
gtk_box_pack_start (GTK_BOX (vbox1), scale, FALSE, TRUE, 5);
gtk_signal_connect(GTK_OBJECT(adj), "value_changed", GTK_SIGNAL_FUNC(value_changed), NULL); 

这是我创建调整并在用户移动 slider 时发送信号的地方。

double 
value_changed (GtkAdjustment *adj)
{
  pos1x = gtk_adjustment_get_value(adj);
  printf ("\n%lf", pos1x);
  return pos1x;
}

这里我将 pos1x 值更改为 slider 的值。

gboolean
on_expose_event (GtkWidget *widget, 
         GdkEventExpose *event, 
         gpointer data)
{
  cairo_t *cr;
  double  posy;
  static gdouble pos2x = 450., pos2y = 290.; //Coordenadas Espelho
  static gdouble pos3x = 450., pos3y = 250.;

  cr = gdk_cairo_create(widget->window);
  pos1x = gtk_adjustment_get_value(adj);
  posy = 250.;

  cairo_set_source_rgb (cr, 0, 0, 0);
  cairo_set_line_width (cr, 1.0);
  cairo_rectangle (cr, (double) pos1x, (double) posy, 20, 80);
  cairo_stroke_preserve (cr);
  cairo_set_source_rgb (cr, 1, 1, 1);
  cairo_fill (cr);

现在,当用户移动 slider 时,我想使用 pos1x 变量更改我使用 cairo 创建的矩形的坐标。但是,我只能得到调整的初始值,而不能得到变化。我无法想出一种方法来做到这一点,如果您能帮我一把,我将不胜感激。

提前致谢。

最佳答案

您需要从 value_changed() 函数中调用 gdk_window_invalidate_rect() 或类似的函数,以使 GTK+ 重新发出 expose-event

关于c - GTK 调整变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21049835/

相关文章:

gtk - Glade treeview liststore数据不可见,无法想象为什么

c++ - 是否可以将 Windows 位图绘制到 cairo 表面?

c - 将元素存储和访问到嵌套结构的数组

java - 调用 JNI 函数创建对象

c - 在GtkTextView中绘图,然后清除

Python GTK3 Evince 查看器 - 如何重新加载文档?

c - 如何使用 GTK/Cairo 将多个 PNG 合成为单个 PNG

lua - lua 无法识别 cairo_text_extents_t

c - 从 C 中的函数返回后数组元素发生变化

c - 在数组外部写入然后使用 realloc 后出现错误的数组值