Ubuntu下用glade和GTK+開發C語言界面程序(一)
來源:程序員人生 發布時間:2014-10-14 00:40:08 閱讀次數:3006次
前言:對于大學中計算機系的每年暑假的課設有太多想說的,能從中學到很多東西,當然不排除打醬油的,這些可以掠過哦,凡事都打醬油,人生也是打醬油的吧。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
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈