GTK+中文社区(gtk.awaysoft.com)

 找回密码
 马上加入

QQ登录

只需一步,快速开始

查看: 3209|回复: 1

关于GTK用cairo绘图问题

[复制链接]

该用户从未签到

发表于 2012-4-24 18:24:35 | 显示全部楼层 |阅读模式
我想用cairo绘制折线图,x坐标每次增加30,y坐标随机产生,每1秒刷新一次图像,但现在每次刷新使上次画布的东西都清空了,怎么回事呢
#include <cairo.h>
#include <gtk/gtk.h>
#include <glib.h>

gint x = 0, y = 0;
cairo_t *cr;
gint update(gpointer data) {
       gtk_widget_queue_draw((GtkWidget*) data);
}

static gboolean
on_expose_event(GtkWidget *widget,
        GdkEventExpose *event,
        gpointer data) {
   
    GRand *rand;
    gint x1 = 0, y1 = 0;
    rand = g_rand_new();

    cr = gdk_cairo_create(widget->window);
    cairo_set_source_rgb(cr, 0, 0, 0);
    cairo_set_line_width(cr, 2.0);

    cairo_move_to(cr, 100, 450);
    cairo_line_to(cr, 700, 450);

    cairo_move_to(cr, 100, 450);
    cairo_line_to(cr, 100, 50);
   
    cairo_move_to(cr, x1, y1);
    x += 30;
    y = g_rand_int_range(rand, 55, 400);
    cairo_line_to(cr, x, y);
   
    x1 = x;
    y1 = y;
   
    cairo_stroke(cr);
   
   
   
    //cairo_set_source_rgb(cr, 0, 0, 0);
    //cairo_arc(cr, x, y, 2, 0, 2 * 3.14);
    //cairo_clip(cr);
    //cairo_rectangle(cr, 0, 0, 256, 256);
    //cairo_fill(cr);
   
   
   
    cairo_select_font_face(cr, &quoturisa",
            CAIRO_FONT_SLANT_NORMAL,
            CAIRO_FONT_WEIGHT_BOLD);

    cairo_set_font_size(cr, 13);

    cairo_move_to(cr, 10, 50);
    cairo_show_text(cr, "温度(单位:℃)");
   
    cairo_move_to(cr, 700, 475);
    cairo_show_text(cr, "时间(单位:s)");
   

    cairo_stroke(cr);          //描绘轮廓
   // cairo_restore(cr);
    cairo_destroy(cr);          //销毁画笔
   
    return FALSE;
}

int main(int argc, char *argv[]) {
    GtkWidget *window;

    gtk_init(&argc, &argv);

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    g_signal_connect(window, "expose-event",
            G_CALLBACK(on_expose_event), NULL);
    g_signal_connect(window, "destroy",
            G_CALLBACK(gtk_main_quit), NULL);

    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
    gtk_window_set_default_size(GTK_WINDOW(window), 800, 500);
    gtk_widget_set_app_paintable(window, TRUE);

    gtk_timeout_add(1000, update, window);

    gtk_widget_show_all(window);

    gtk_main();

    return 0;
}
  • TA的每日心情
    奋斗
    2016-7-24 12:40
  • 签到天数: 125 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2012-4-26 11:08:41 | 显示全部楼层
    可以试着在 绘制事件末尾加入 gtk_main_iteration();
    *滑块验证:
    您需要登录后才可以回帖 登录 | 马上加入

    本版积分规则

    申请友链|Archiver|小黑屋|手机版|GTK+中文社区 ( 粤ICP备13080851号 )

    我要啦免费统计

    GMT+8, 2024-12-22 01:47 , Processed in 0.032700 second(s), 8 queries , Redis On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表