打印

gtk界面编程

[复制链接]
483|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
这是一个很好的gtk界面编程的例子:
#include <gtk/gtk.h>
int main( int argc, char *argv[])
{
    GtkWidget *window;
    /*初始化整个GTK+程序,是每一个GTK+程序必不可少的部分*/
    gtk_init(&argc, &argv);
    /*这里生成了一个窗口构件——GtkWindow,GTK_WINDOW_TOPLEVEL包含窗口的标题栏和边框,同意用窗口管理器来进行管理*/
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    /*开始显示窗口*/
    gtk_widget_show(window);
    gtk_main();
    return 0;
}
编译程序之前需要在ubuntu上安装:
sudo apt-get install libgtk-3-dev
编译上面程序:
gcc gt.c -o gtkwin `pkg-config --cflags --libs gtk+-3.0`

运行结果是一枚窗口:



参考**:
gtk编程.docx (55.16 KB)

使用特权

评论回复

相关帖子

沙发
keer_zu|  楼主 | 2020-7-1 15:27 | 只看该作者
本帖最后由 keer_zu 于 2020-7-1 18:24 编辑

@yyy71cj @dirtwillfly @icecut @dong_abc
把gtk用起来,自己做个文本编辑器,实现《设计模式》第二章中的例子。
我一直没有发现这个例子的代码,自己做一个可以更好掌握设计模式。


开始弄:

github:  https://github.com/KevinZu/lexi



使用特权

评论回复
评论
keer_zu 2020-7-2 09:22 回复TA
@dirtwillfly :大公司分得比较细,小公司不管内核还是应用 
dirtwillfly 2020-7-1 21:36 回复TA
后面我也会转到linux,不过是驱动方向 
板凳
keer_zu|  楼主 | 2020-7-2 13:41 | 只看该作者

使用特权

评论回复
地板
keer_zu|  楼主 | 2020-7-3 13:32 | 只看该作者
上面窗口画图形代码:

#include <stdio.h>
#include <gtk/gtk.h>
void gtest(int a)
{
        printf("===:%d\n",a);
}



static void
draw_round_rectangle (cairo_t * cr,
                      double x, double y,
                      double width, double height, double r)
{
        cairo_move_to (cr, x + r, y);
        cairo_line_to (cr, x + width - r, y);

        cairo_move_to (cr, x + width, y + r);
        cairo_line_to (cr, x + width, y + height - r);

        cairo_move_to (cr, x + width - r, y + height);
        cairo_line_to (cr, x + r, y + height);

        cairo_move_to (cr, x, y + height - r);
        cairo_line_to (cr, x, y + r);

        cairo_arc (cr, x + r, y + r, r, 3.14, 3 * 3.14 / 2.0);
        cairo_arc (cr, x + width - r, y + r, r, 3 * 3.14 / 2, 2 * 3.14);
        cairo_arc (cr, x + width - r, y + height - r, r, 0, 3.14 / 2);
        cairo_arc (cr, x + r, y + height - r, r, 3.14 / 2, 3.14);
}

static gboolean
draw (GtkWidget *widget, cairo_t *cr, gpointer user_data)
{
        cr = gdk_cairo_create (gtk_widget_get_window (widget));

        cairo_set_source_rgb (cr, 0, 0, 0);
        cairo_set_line_width (cr, 1);
        cairo_rectangle (cr, 20, 20, 120, 80);
        cairo_rectangle (cr, 180, 20, 80, 80);
        cairo_stroke_preserve (cr);
        cairo_set_source_rgb (cr, 1, 1, 1);
        cairo_fill (cr);

        cairo_set_source_rgb (cr, 0, 0, 0);
        cairo_arc (cr, 330, 60, 40, 0, 2 * 3.14);
        cairo_stroke_preserve (cr);
        cairo_set_source_rgb (cr, 1, 1, 1);
        cairo_fill (cr);

        cairo_set_source_rgb (cr, 0, 0, 0);
        cairo_arc (cr, 90, 160, 40, 3.14 / 4, 3.14);
        cairo_close_path (cr);
        cairo_stroke_preserve(cr);
        cairo_set_source_rgb (cr, 1, 1, 1);
        cairo_fill (cr);

        cairo_set_source_rgb (cr, 0, 0, 0);
        cairo_translate (cr, 220, 180);
        cairo_scale (cr, 1, 0.7);
        cairo_arc (cr, 0, 0, 50, 0, 2 * 3.14);
        cairo_stroke_preserve (cr);
        cairo_set_source_rgb (cr, 1, 1, 1);
        cairo_fill (cr);

        cairo_set_source_rgb (cr, 0.8, 0.4, 0);
        cairo_translate (cr, 80, -30);
        cairo_set_line_width (cr, 6);
        draw_round_rectangle (cr, 5, 5, 60, 60, 8);
        cairo_stroke_preserve (cr);
        cairo_set_source_rgb (cr, 0.8, 0.8, 0.2);
        cairo_fill (cr);

        cairo_destroy (cr);

        return FALSE;
}

int gt( int argc, char **argv)
{
        GtkWidget *window;
        GtkWidget *darea;

        gtk_init (&argc, &argv);

        window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

        darea = gtk_drawing_area_new ();
        gtk_container_add (GTK_CONTAINER (window), darea);

        g_signal_connect (darea, "draw",
                      G_CALLBACK (draw), 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), 500, 400);

        gtk_widget_show_all (window);

        gtk_main ();

        return 0;
}

@gaoyang9992006


使用特权

评论回复
5
gaoyang9992006| | 2020-7-3 15:31 | 只看该作者
这个GUI用的人还是很多的。

使用特权

评论回复
6
keer_zu|  楼主 | 2020-7-3 15:48 | 只看该作者
gaoyang9992006 发表于 2020-7-3 15:31
这个GUI用的人还是很多的。

可能是更底层一些吧,很多UI系统都基于它实现。
还有就是linux下一共也就这几种桌面系统

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1352

主题

12436

帖子

53

粉丝