環境搭建
安裝必要的工具
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工作還是交給工具自動來完成的好,我可以節約點時間來和人聊聊天。