Ubuntu下用glade和GTK+開發(fā)C語(yǔ)言界面程序(一)
來(lái)源:程序員人生 發(fā)布時(shí)間:2014-10-14 00:40:08 閱讀次數(shù):3002次
前言:對(duì)于大學(xué)中計(jì)算機(jī)系的每年暑假的課設(shè)有太多想說(shuō)的,能從中學(xué)到很多東西,當(dāng)然不排除打醬油的,這些可以掠過(guò)哦,凡事都打醬油,人生也是打醬油的吧。2333。
對(duì)于大三以前的課設(shè)一般的要求都是用C寫的,即使你學(xué)的面向?qū)ο蠛芎茫仓荒芾侠蠈?shí)實(shí)的來(lái)用C寫。當(dāng)然這其中還有好多要說(shuō)道的東西。
用C寫,面對(duì)windows下的那不能再吐槽的cmd終端,我就不說(shuō)太多了,因?yàn)橐呀?jīng)很少到windows上做東西。用C寫,又想寫的高大上一點(diǎn),當(dāng)然要有圖形界面了,在linux上用C寫界面程序,GTK+是少不了的,但是運(yùn)用面向?qū)ο蟮乃枷雭?lái)說(shuō),如果讓代碼中夾雜著太多界面的東西,感覺(jué)你寫到幾千行的時(shí)候,你就分不出來(lái)那里是主要邏輯,那里是界面程序了。用MVC的思想來(lái)說(shuō),你得把主要邏輯來(lái)體現(xiàn)在你的主要算法上,界面來(lái)輔助更好的展現(xiàn)你的思想。那么,用Glade來(lái)畫界面,在代碼中寫主要算法邏輯,這樣就能很清晰把界面程序和主要算法邏輯分離開。使開發(fā)過(guò)程更快,同時(shí)也減少了寫界面的麻煩。同時(shí)用GTK+來(lái)寫一些用C語(yǔ)言實(shí)現(xiàn)的界面連接程序,方便galde畫出的界面能更好的工作。
好了,說(shuō)了這么多,先把主要要用到的東西來(lái)介紹一下。
主要環(huán)境:ubuntu14.04,當(dāng)然12.04也可以。
開發(fā)中要用到的工具:gcc編譯器,make命令,glade開發(fā)界面,GTK+的安裝,一個(gè)編輯程序的ide。
上面的編輯程序中我沒(méi)有用linux下的vim來(lái)寫,一個(gè)是自己還不太熟悉,同時(shí),寫一個(gè)比較大的工程的話來(lái)說(shuō),vim總覺(jué)得還不是太適合。
環(huán)境配置:
1、Glade的安裝可以到ubuntu的軟件中心中搜索安裝。這個(gè)是最簡(jiǎn)單的。也可以在命令行中用
<span style="font-size:18px;">sudo apt-get install glade</span>
來(lái)安裝。
2、make的安裝
直接在命令行中輸入
<span style="font-size:18px;">sudo apt-get install make</span>
來(lái)安裝。
3、對(duì)于gcc和GTK+,來(lái)說(shuō),一般安裝的linux中都有自帶的gcc和GTK+,這個(gè)可以不用在安裝,如果覺(jué)得gcc的版本比較低,可以更新gcc的版本。GTK+ 的版本為3.0以上。
安裝好以上程序后,可以檢驗(yàn)一下是否都能正常工作。
1、對(duì)于galde來(lái)說(shuō),按下win鍵,在出現(xiàn)的界面中輸入glade,點(diǎn)擊glade圖標(biāo),出現(xiàn)下面的界面說(shuō)明galde是可以運(yùn)行的。

同時(shí)也可以在命令行中輸入glade,同樣會(huì)打開glade程序。
2、gcc的檢驗(yàn)可以以最簡(jiǎn)單的C文件來(lái)檢驗(yàn)。
在編輯器中新建立一個(gè)HelloWorld.c程序。
<span style="font-size:18px;">#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("HelloWorld!");
return 0;
}</span>
保存文件后,在命令行中進(jìn)入到保存的上述文件的的文件夾下,輸入以下編譯命令,來(lái)編譯上述HelloWorld.c文件
<span style="font-size:18px;">gcc HelloWorld.c -o helloworld</span>
編譯上面命令后,會(huì)生成可執(zhí)行文件,HelloWorld,輸入
<span style="font-size:18px;">./HelloWorld 來(lái)運(yùn)行生成的HelloWorld程序。</span>
3、make的檢驗(yàn)
直接在命令行中輸入
<span style="font-size:18px;">make --version</span>
可以看到make的版本。

好了上面的環(huán)境都搭建完成后,可以跑一個(gè)最簡(jiǎn)單的測(cè)試程序。
Demo 測(cè)試。
在編輯器中新建立一個(gè)main.c文件,代碼如下
<span style="font-size:14px;">#include <stdlib.h>
#include <gtk/gtk.h>
//HelloWorld按鈕的回調(diào)函數(shù),也就是按下HelloWorld按鈕會(huì)執(zhí)行這個(gè)helloworld函數(shù)
static void helloWorld (GtkWidget *wid, GtkWidget *win)
{
GtkWidget *dialog = NULL;//gtk中的控件
//創(chuàng)建一個(gè)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);//設(shè)置窗口的位置
gtk_dialog_run (GTK_DIALOG (dialog));//運(yùn)行上面創(chuàng)建的窗口
gtk_widget_destroy (dialog);//釋放窗口的界面內(nèi)存
}
int main (int argc, char *argv[])
{
GtkWidget *button = NULL;
GtkWidget *win = NULL;
GtkWidget *vbox = NULL;
/* Initialize GTK+ *///初始化GTK+ 的代碼,這三行代碼不要?jiǎng)泳涂梢裕约旱拇a在下面寫
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出來(lái)一個(gè)主窗口
gtk_container_set_border_width (GTK_CONTAINER (win), 8);//設(shè)置窗口邊緣的大小
gtk_window_set_title (GTK_WINDOW (win), "Hello World");//設(shè)置窗口標(biāo)題
gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER);//設(shè)置窗口位置
gtk_widget_realize (win);//實(shí)現(xiàn)上述窗口
g_signal_connect (win, "destroy", gtk_main_quit, NULL);//窗口信號(hào)連接,點(diǎn)擊關(guān)閉按鈕是會(huì)關(guān)閉窗口。
/* Create a vertical box with buttons */
vbox = gtk_vbox_new (TRUE, 6);創(chuàng)建一個(gè)Vbox容器
gtk_container_add (GTK_CONTAINER (win), vbox);//將創(chuàng)建的容器添加到上述創(chuàng)建的主窗口中
button = gtk_button_new_from_stock (GTK_STOCK_DIALOG_INFO);//創(chuàng)建一個(gè)按鈕
g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (helloWorld), (gpointer) win);//設(shè)置按鈕的回調(diào)函數(shù),看到callback大家都應(yīng)該懂這個(gè)是回調(diào)函數(shù)的。
gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);//將創(chuàng)建的按鈕添加到上述的vbox中
//下面創(chuàng)建關(guān)閉按鈕,并將關(guān)閉按鈕的回調(diào)函數(shù)設(shè)置為系統(tǒng)的推出函數(shù)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);//顯示上述的創(chuàng)建的界面
gtk_main ();//開始整個(gè)主循環(huán)。
return 0;
}</span>
上面的代碼中都做了詳細(xì)的注釋,看懂應(yīng)該不難。
保存上面的main.c文件后,在命令行中輸入
<span style="font-size:18px;">gcc -Wall -g -o main main.c `pkg-config --cflags --libs gtk+-3.0` -export-dynamic</span>
會(huì)進(jìn)行編譯main.c文件并生成可執(zhí)行文件main.
繼續(xù)輸入
<span style="font-size:18px;">./main</span>
運(yùn)行可執(zhí)行文件。會(huì)出現(xiàn)下面的界面。

點(diǎn)擊信息,會(huì)出現(xiàn)下面的HelloWorld信息界面。

好了,到這里所有的工作已經(jīng)做完了,接下來(lái)就可以進(jìn)行主要程序的開發(fā)。當(dāng)然,這還需要你學(xué)習(xí)一些其他的知識(shí),比如如何在glade中畫出你所要的界面,如何進(jìn)行界面信號(hào)和實(shí)際函數(shù)的連接。以及如何在代碼中關(guān)聯(lián)這些界面,和如何在代碼中執(zhí)行一些界面信息。
如何使用make來(lái)使編譯命令來(lái)更加簡(jiǎn)單智能。
這些只是我會(huì)結(jié)合我的課設(shè)中用到的一些來(lái)講解一下,當(dāng)然,畢竟能力有限,在上面和以后有講的不當(dāng)?shù)脑挘瑲g迎批評(píng)指正。
尊重原創(chuàng),歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明出處:http://write.blog.csdn.net/postedit/38944891
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)