歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> GTK+學習筆記

GTK+學習筆記

日期:2017/3/1 10:38:39   编辑:Linux編程

開發環境

Fedora 12

GTK+2.0

需要安裝下面兩個軟件包:

yum install gtk2

yum install gtk2-devel


最簡單的GTK程序

先寫一個最簡單的例子,顯示一個空白的窗口:

[cpp]
  1. #include <gtk/gtk.h> //gtk程序所需的頭文件
  2. int main(int argc,char *argv[])
  3. {
  4. GtkWidget *window; //定義一個構件指針
  5. gtk_init(&argc,&argv); //初始化GTK環境
  6. window = gtk_window_new(GTK_WINDOW_TOPLEVEL);//新建一個標准的有框架窗口
  7. gtk_widget_show(window); //顯示window
  8. gtk_main();//啟動GTK
  9. return 1;
  10. }
編譯:

gcc -Wall -o helloworld helloworld.c `pkg-config --cflags --libs gtk+-2.0`

執行:

./helloworld

效果:



簡單的窗口設置

這個窗口的標題是可執行文件的名稱,而且顯示在桌面的左上角,這些都可以在程序裡設置,修改後的程序如下:

[cpp]
  1. #include <gtk/gtk.h>
  2. int main(int argc,char *argv[])
  3. {
  4. GtkWidget *window;
  5. gtk_init(&argc,&argv);
  6. window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  7. gtk_window_set_title(GTK_WINDOW(window),"My first GTK"); //定義窗口的標題
  8. gtk_window_set_default_size(GTK_WINDOW(window),200,200); //設置窗口的大小
  9. gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_MOUSE); //設置窗口顯示的位置為鼠標的位置
  10. gtk_widget_show(window);
  11. gtk_main();
  12. return 1;
  13. }
事件和信號:

這個程序還有一個問題,點擊窗口上的關閉後,程序並沒用推出,需要用Ctrl-C結束程序,這是因為程序沒用對關閉窗口的事件進行處理,需要用g_signal_connect函數,它的作用是將事件的信號與相應的回調函數綁定。關閉窗口時會發出“destroy”信號,修改程序如下:

[cpp]
  1. #include <gtk/gtk.h>
  2. void close_app(GtkWidget *window,gpointer data)
  3. {
  4. gtk_main_quit();//退出gtk_main
  5. }
  6. int main(int argc,char *argv[])
  7. {
  8. GtkWidget *window;
  9. gtk_init(&argc,&argv);
  10. window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  11. gtk_window_set_title(GTK_WINDOW(window),"My first GTK");
  12. gtk_window_set_default_size(GTK_WINDOW(window),200,200);
  13. gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_MOUSE);
  14. //將destroy信號綁定close_app函數
  15. g_signal_connect(GTK_OBJECT(window),"destroy",GTK_SIGNAL_FUNC(close_app),NULL);
  16. gtk_widget_show(window);
  17. gtk_main();
  18. return 1;
  19. }
Copyright © Linux教程網 All Rights Reserved