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来写,一个是自己还不太熟悉,同一时候,写一个比較大的project的话来说,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是能够执行的。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVzdF9zdXBlcm1hbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
同一时候也能够在命令行中输入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的版本号。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVzdF9zdXBlcm1hbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
好了上面的环境都搭建完毕后。能够跑一个最简单的測试程序。
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信息界面。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVzdF9zdXBlcm1hbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
好了,到这里全部的工作已经做完了,接下来就能够进行主要程序的开发。
当然。这还须要你学习一些其它的知识。比方怎样在glade中画出你所要的界面。怎样进行界面信号和实际函数的连接。
以及怎样在代码中关联这些界面。和怎样在代码中运行一些界面信息。
怎样使用make来使编译命令来更加简单智能。
这些仅仅是我会结合我的课设中用到的一些来解说一下,当然,毕竟能力有限。在上面和以后有讲的不当的话,欢迎批评指正。
尊重原创,欢迎转载,转载请注明出处:http://write.blog.csdn.net/postedit/38944891
Ubuntu下用glade和GTK+开发C语言界面程序(一)的更多相关文章
- Ubuntu下用glade和GTK+开发C语言界面程序(三)——学习make的使用方法
makefile的规则 makefile的规则例如以下: target ... : prerequisites ... command ... ... target能够是一个object file(目 ...
- 在Ubuntu下搭建ASP.NET 5开发环境
在Ubuntu下搭建ASP.NET 5开发环境 0x00 写在前面的废话 年底这段时间实在太忙了,各种事情都凑在这个时候,没时间去学习自己感兴趣的东西,所以博客也好就没写了.最近工作上有个小功能要做成 ...
- 转[开发环境配置]在Ubuntu下配置舒服的Python开发环境
在Ubuntu下配置舒服的Python开发环境 Ubuntu 提供了一个良好的 Python 开发环境,但如果想使我们的开发效率最大化,还需要进行很多定制化的安装和配置.下面的是我们团队开发人员推荐的 ...
- (4)Linux(ubuntu)下配置Opencv3.1.0开发环境的详细步骤
Ubuntu下配置opencv3.1.0开发环境 1.最近工作上用到在Ubuntu下基于QT和opencv库开发应用软件(计算机视觉处理方面),特把opencv的配置过程详细记录,以供分享 2.步骤说 ...
- 【转】在Ubuntu下建立Eclipse的Android开发环境
本文将介绍如何建立Ubuntu下基于Eclipse的Android开发环境的方法. 大部分的Android开发者都是使用Eclipse来开发Android,本文将向各位介绍一下建立Ubuntu下基于E ...
- 在Ubuntu下构建Bullet以及执行Bullet的样例程序
在Ubuntu下构建Bullet以及执行Bullet的样例程序 1.找到Bullet的下载页,地址是:https://code.google.com/p/bullet/downloads/list 2 ...
- Ubuntu下ssh连接在服务端显示图形界面
Ubuntu下ssh连接在服务端显示图形界面 step1 安装ssh服务 服务端安装运行ssh,在终端运行命令如下: sudo apt-get install openssh-server 在客户端安 ...
- ubuntu下如何安装codeblocks集成开发环境
codeblocks是一个十分优秀的C/C++开发IDE,虽然后起之秀codelite目前来看大有超越之势哦. 不过在ubuntu下安装codeblocks却比较麻烦,不像其他linux发行版,比如s ...
- 39 Ubuntu下配置python的vscode开发环境
0 引言 最近想在ubuntu下搞深度学习,首先配置了python的vscode开发环境.在配置python时,选择了Anaconda3.x,保证了其相对于系统python2.x的独立性.另外,vsc ...
随机推荐
- crm 系统项目(三) 自动分页
crm 系统项目(三) 自动分页 需求: 1. 做一个自动分页, 每15条数据1页 2. 让当前页数在中间显示 3. 上一页, 下一页 注意情况: 1.总页数 小于 规定显示的页数 2. 左右两边极值 ...
- react生命周期知识点
react生命周期知识点 一个React组件的生命周期分为三个部分:实例化.存在期和销毁时. 实例化 组件在客户端被实例化,第一次被创建时,以下方法依次被调用: 1.getDefaultProps2. ...
- 2015 Multi-University Training Contest 4 hdu 5334 Virtual Participation
Virtual Participation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Ot ...
- ASP.NET-POSTBACK是什么
当我们直接从服务端读取网页时,表时此网页并没有post(提交),当用户再次提交表单时,就会把此网页的相关参数传给服务器处理,对于服务器来说就是一个postback(提交返回),即提交回来了.这就是po ...
- Spring中 @Autowired标签与 @Resource标签 的区别(转)
spring不但支持自己定义的@Autowired注解,还支持由JSR-250规范定义的几个注解,如:@Resource. @PostConstruct及@PreDestroy. 1. @Autowi ...
- linux 下面avr开发环境的安装
(1)安装开发工具链 yum install avr-* 会安装以下的工具 avr-gcc-4.7.2-1.fc17.i686avr-libc-1.8.0-2.fc17.noarchavr-binut ...
- Objective-C基础笔记(3)OC的内存管理
Objective-C的内存基本管理 在OC中每一个变量都保存着引用计数器,当这个对象的引用计数器为0的时候该对象会被回收.当使用alloc.new或者copy创建一个对象的时候,对象的引用计数器被置 ...
- bzoj2229: [Zjoi2011]最小割(分治最小割+最小割树思想)
2229: [Zjoi2011]最小割 题目:传送门 题解: 一道非常好的题目啊!!! 蒟蒻的想法:暴力枚举点对跑最小割记录...绝对爆炸啊.... 开始怀疑是不是题目骗人...难道根本不用网络流?? ...
- C#小代码
1.创建随机ID: Id = Guid.NewGuid().ToString("N"); 2.创建随机时间: CreationTime = DateTime.Now: int st ...
- C#调用webservice(一)
最近一直在搞网络编程,这篇是关于webservice的,准备写两篇例子这篇是实现手机号码归宿地查询,下篇准备写实现机票查询. 这个网站(http://www.webxml.com.cn/zh_cn/i ...