环境搭建
安装必要的工具
apt install libgtk-3-dev pkg-config
可以安装额外的example包,里面提供的一些demo程序是非常好的参考
apt install gtk-3-examples
gtk-3-examples包中的hello-world.c程序
#include <gtk/gtk.h>
static void
print_hello (GtkWidget *widget,
gpointer data)
{
g_print ("Hello World\n");
}
static void
activate (GtkApplication *app,
gpointer user_data)
{
GtkWidget *window;
GtkWidget *button;
GtkWidget *button_box;
window = gtk_application_window_new (app);
gtk_window_set_title (GTK_WINDOW (window), "Window");
gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
button_box = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
gtk_container_add (GTK_CONTAINER (window), button_box);
button = gtk_button_new_with_label ("Hello World");
g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL);
g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_widget_destroy), window);
gtk_container_add (GTK_CONTAINER (button_box), button);
gtk_widget_show_all (window);
}
int
main (int argc,
char **argv)
{
GtkApplication *app;
int status;
app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
return status;
}`
命令行编译:
gcc hello-world.c -o hello `pkg-config --cflags --libs gtk+-3.0` -o hello
glade画图
使用glade
进行画图,它提供了一种IDE工具来帮助绘图,对新手来说非常友好,最终和android app的布局一样都使用xml保存,可以前期使用glade
来进行UI布局调整,之后可以直接编辑xml文件来进行程序逻辑调整。
程序中需要加载解释相应的xml布局文件,从xml文件中构建运行时对象,通过元件的id来过去对象,之后进行各种操作
apt install glade
有兴趣可以参考这两个文件,不同发行版上路径可能不同:
/usr/share/doc/gtk-3-examples/examples/builder.c
/usr/share/doc/gtk-3-examples/examples/builder.ui
帮助文档
apt install devhelp
它里面提供了大量的api说明文档,必备手册
如何编译gtk静态版本的程序,这样可以在任意系统中都可以运行?
gtk本身只提供了动态链接库版本,没有提供静态链接版本的程序,它本身依赖X11,wayland,libfont等系统库,总共有70多个库,我们想要静态链接的gtk程序随处运行,但是gtk库本身依赖很多系统特定的库。假如静态链接的是wayland1.0,但是机器上运行的是wayland0.1,这样就非常容易出现兼容性问题,所以这个静态链接的必要性需要商榷一下。
结语
最近两年一直使用vim,里面配置了ctags,cscope,taglist等,经常看到各种编辑器的各种嘲讽链,个人感觉到哪座山唱那首歌是非常必须的,例如我写个python绝对使用pycharm,写android和java用eclipse,绝不会傻叉到非得用vim写android应用,光导入包都要耗费我好些脑细胞,不如baidu一下花一上午时间整个eclipse+ADT
,import工作还是交给工具自动来完成的好,我可以节约点时间来和人聊聊天。