1. 程式人生 > >Ubuntu下用glade和GTK+開發C語言介面程式(一)

Ubuntu下用glade和GTK+開發C語言介面程式(一)

前言:對於大學中計算機系的每年暑假的課設有太多想說的,能從中學到很多東西,當然不排除打醬油的,這些可以掠過哦,凡事都打醬油,人生也是打醬油的吧。2333。

對於大三以前的課設一般的要求都是用C寫的,即使你學的面向物件很好,也只能老老實實的來用C寫。當然這其中還有好多要說道的東西。

用C寫,面對windows下的那不能再吐槽的cmd終端,我就不說太多了,因為已經很少到windows上做東西。用C寫,又想寫的高大上一點,當然要有圖形介面了,在linux上用C寫介面程式,GTK+是少不了的,但是運用面向物件的思想來說,如果讓程式碼中夾雜著太多介面的東西,感覺你寫到幾千行的時候,你就分不出來那裡是主要邏輯,那裡是介面程式了。用MVC的思想來說,你得把主要邏輯來體現在你的主要演算法上,介面來輔助更好的展現你的思想。那麼,用Glade來畫介面,在程式碼中寫主要演算法邏輯,這樣就能很清晰把介面程式和主要演算法邏輯分離開。使開發過程更快,同時也減少了寫介面的麻煩。同時用GTK+來寫一些用C語言實現的介面連線程式,方便galde畫出的介面能更好的工作。

好了,說了這麼多,先把主要要用到的東西來介紹一下。

主要環境:ubuntu14.04,當然12.04也可以。

開發中要用到的工具:gcc編譯器,make命令,glade開發介面,GTK+的安裝,一個編輯程式的ide。

上面的編輯程式中我沒有用linux下的vim來寫,一個是自己還不太熟悉,同時,寫一個比較大的工程的話來說,vim總覺得還不是太適合。

環境配置:

1、Glade的安裝可以到ubuntu的軟體中心中搜索安裝。這個是最簡單的。也可以在命令列中用

<span style="font-size:18px;">sudo apt-get install glade</span>
來安裝。

2、make的安裝

直接在命令列中輸入

<span style="font-size:18px;">sudo apt-get install make</span>
來安裝。

3、對於gcc和GTK+,來說,一般安裝的linux中都有自帶的gcc和GTK+,這個可以不用在安裝,如果覺得gcc的版本比較低,可以更新gcc的版本。GTK+ 的版本為3.0以上。

安裝好以上程式後,可以檢驗一下是否都能正常工作。

1、對於galde來說,按下win鍵,在出現的介面中輸入glade,點選glade圖示,出現下面的介面說明galde是可以執行的。


同時也可以在命令列中輸入glade,同樣會開啟glade程式。

2、gcc的檢驗可以以最簡單的C檔案來檢驗。

在編輯器中新建立一個HelloWorld.c程式。

<span style="font-size:18px;">#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[]) {
     printf("HelloWorld!");
     return 0;
}</span>
儲存檔案後,在命令列中進入到儲存的上述檔案的的資料夾下,輸入以下編譯命令,來編譯上述HelloWorld.c檔案
<span style="font-size:18px;">gcc HelloWorld.c -o helloworld</span>
編譯上面命令後,會生成可執行檔案,HelloWorld,輸入
<span style="font-size:18px;">./HelloWorld 來執行生成的HelloWorld程式。</span>
3、make的檢驗

直接在命令列中輸入

<span style="font-size:18px;">make --version</span>
可以看到make的版本。


好了上面的環境都搭建完成後,可以跑一個最簡單的測試程式。

Demo 測試。

在編輯器中新建立一個main.c檔案,程式碼如下

<span style="font-size:14px;">#include <stdlib.h>
#include <gtk/gtk.h>
//HelloWorld按鈕的回撥函式,也就是按下HelloWorld按鈕會執行這個helloworld函式
static void helloWorld (GtkWidget *wid, GtkWidget *win)
{
  GtkWidget *dialog = NULL;//gtk中的控制元件
//建立一個dialog視窗,上面的資訊為Hello World!
  dialog = gtk_message_dialog_new (GTK_WINDOW (win), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, "Hello World!");
  gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);//設定視窗的位置
  gtk_dialog_run (GTK_DIALOG (dialog));//執行上面建立的視窗
  gtk_widget_destroy (dialog);//釋放視窗的介面記憶體
}

int main (int argc, char *argv[])
{
  GtkWidget *button = NULL;
  GtkWidget *win = NULL;
  GtkWidget *vbox = NULL;

  /* Initialize GTK+ *///初始化GTK+ 的程式碼,這三行程式碼不要動就可以,自己的程式碼在下面寫
  g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, (GLogFunc) gtk_false, NULL);
  gtk_init (&argc, &argv);
  g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, g_log_default_handler, NULL);

  /* Create the main window */
  win = gtk_window_new (GTK_WINDOW_TOPLEVEL);//new出來一個主視窗
  gtk_container_set_border_width (GTK_CONTAINER (win), 8);//設定視窗邊緣的大小
  gtk_window_set_title (GTK_WINDOW (win), "Hello World");//設定視窗標題
  gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER);//設定視窗位置
  gtk_widget_realize (win);//實現上述視窗
  g_signal_connect (win, "destroy", gtk_main_quit, NULL);//視窗訊號連線,點選關閉按鈕是會關閉視窗。

  /* Create a vertical box with buttons */
  vbox = gtk_vbox_new (TRUE, 6);建立一個Vbox容器
  gtk_container_add (GTK_CONTAINER (win), vbox);//將建立的容器新增到上述建立的主視窗中

  button = gtk_button_new_from_stock (GTK_STOCK_DIALOG_INFO);//建立一個按鈕
  g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (helloWorld), (gpointer) win);//設定按鈕的回撥函式,看到callback大家都應該懂這個是回撥函式的。
  gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);//將建立的按鈕新增到上述的vbox中
//下面建立關閉按鈕,並將關閉按鈕的回撥函式設定為系統的推出函式gtk_main_quit。
  button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
  g_signal_connect (button, "clicked", gtk_main_quit, NULL);
  gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);

  /* Enter the main loop */
  gtk_widget_show_all (win);//顯示上述的建立的介面
  gtk_main ();//開始整個主迴圈。
  return 0;
}</span>
上面的程式碼中都做了詳細的註釋,看懂應該不難。

儲存上面的main.c檔案後,在命令列中輸入

<span style="font-size:18px;">gcc -Wall -g -o main main.c `pkg-config --cflags --libs gtk+-3.0` -export-dynamic</span>

會進行編譯main.c檔案並生成可執行檔案main.

繼續輸入

<span style="font-size:18px;">./main</span>
執行可執行檔案。會出現下面的介面。


點選資訊,會出現下面的HelloWorld資訊介面。


好了,到這裡所有的工作已經做完了,接下來就可以進行主要程式的開發。當然,這還需要你學習一些其他的知識,比如如何在glade中畫出你所要的介面,如何進行介面訊號和實際函式的連線。以及如何在程式碼中關聯這些介面,和如何在程式碼中執行一些介面資訊。

如何使用make來使編譯命令來更加簡單智慧。

這些只是我會結合我的課設中用到的一些來講解一下,當然,畢竟能力有限,在上面和以後有講的不當的話,歡迎批評指正。

尊重原創,歡迎轉載,轉載請註明出處:http://write.blog.csdn.net/postedit/38944891