gpt4 book ai didi

可滚动绘图区中的开罗

转载 作者:行者123 更新时间:2023-12-04 18:18:50 25 4
gpt4 key购买 nike

我在 Ubuntu 11.04 (Natty) 上使用 gtk+-3.2.4。我正在尝试使用 Cairo 绘制 GtkDrawingArea 并使绘图区域可滚动。代码运行没有错误,但没有完成绘图。我究竟做错了什么 ?

// gcc -Wextra -o scrol `pkg-config --cflags --libs gtk+-3.0` scrol1.c

#include <gtk/gtk.h>

#define WINDOW_WIDTH 800
#define WINDOW_HEIGHT 600

static gboolean draw_cb (GtkWidget *widget, GdkEventExpose *event)
{
cairo_t *cr;
cr = gdk_cairo_create (gtk_widget_get_window (widget));
cairo_set_source_rgb(cr, 1, 1, 1);
cairo_paint(cr);
cairo_set_source_rgb (cr, 0.42, 0.65, 0.80);
cairo_set_line_width (cr,6);
cairo_rectangle (cr, 3, 3, 100, 100);
cairo_stroke (cr);
cairo_destroy(cr);
return FALSE;
}

int main (int argc, char *argv[])
{
gtk_init (&argc, &argv);
GtkWidget *window;
GtkWidget *grid;
GtkWidget *swindow;
GtkWidget *viewport;
GtkWidget *darea;

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
grid = gtk_grid_new();
swindow = gtk_scrolled_window_new (NULL,NULL);
viewport = gtk_viewport_new (NULL,NULL);
darea = gtk_drawing_area_new();

gtk_container_add (GTK_CONTAINER(viewport), darea);
gtk_container_add (GTK_CONTAINER(swindow), viewport);
gtk_grid_attach (GTK_GRID(grid), swindow, 0, 1, 1, 2);
gtk_container_add (GTK_CONTAINER(window), grid);

g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
g_signal_connect (darea, "draw", G_CALLBACK(draw_cb), NULL);

gtk_widget_show_all (window);
gtk_main ();
return 0;
}

最佳答案

这是您的代码创建的窗口的屏幕截图:

Screenshot of window

我想你期待看到一个正方形。但是,您所看到的只是该正方形的左上角。这是因为绘图区域请求的空间非常小,导致窗口很小。这意味着您的精彩作品正在被剪裁以适合这个最小尺寸的窗口。你可以做几件事:

  • 设置包含绘图区域的滚动窗口的最小尺寸:
    gtk_widget_set_size_request( swindow, 500, 500 );

    这将导致一个 500 x 500 像素的绘图区域可见(这比您需要的正方形要多得多)。但是,如果您将窗口放大,则绘图区域将不会填满它。
  • 将滚动窗口设置为占据它可以获得的所有水平和垂直空间:
    gtk_widget_set_hexpand( swindow, TRUE );
    gtk_widget_set_vexpand( swindow, TRUE );

    如果您只是这样做,那么窗口最初看起来与原始代码中的窗口相同。但是,如果您手动调整窗口大小,您会看到滚动窗口(以及绘图区域)会扩展以填充窗口中的所有空间。如果你把它扩展得足够大,你会看到你的正方形。

  • 如果您将上述两者结合起来,那么您将得到一个最初约为 500x500 像素的窗口。如果您调整它的大小,那么绘图区域将扩大以填满窗口。

    您还可以添加 gtk_widget_set_size_request调用以设置绘图区域小部件的大小。如果您将其设置为大于滚动窗口的大小,那么您将获得滚动条。

    关于可滚动绘图区中的开罗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11132177/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com