原创 【原创】GLADE/GTK在WIN下的编译

2008-12-22 20:33 4543 3 3 分类: 软件与OS
       哎,本来了自己是喜欢搞硬件的,偏偏这段时间实习却去了家软件为主的公司,现在成了一个菜鸟级的代码员了,离自己的梦想越来越远了。看来在工作之余确实要拿出时间来搞搞自己喜欢的东西才行。

       这段时间在搞QT。为什么用QT呢?呵呵应为项目前期别人用QT编好了,要我接过来,我总不可能拿过来就全部改写吧?再说我现在也还没有那样的能力呢呵呵。QT确实不好,开源的仅限于学习之用,要开发商业版的软件,那可是要付出巨额费用购买商业版的,呵呵在中国也罢,满天飞的D版,谁来管。呵呵反正我是不怎么学习QT的。有QT当然就有相对的GTK呢,呵呵GTK也是刚学,相比以后嵌入式上的编程也用的到,用了开源的库当然要找个开源的IDE啊(当然N人用GCC+MinGw编呵呵)呵呵,用的多的可能是DEV_CPP了,不过那都是N年前的东西了,最近找了个CODE::BLOKDS呵呵界面美观和VS差不多的漂亮,而且代码提示功能很全,调试也很到位,可以用多种编译器,呵呵它的好处只要你用GOOGLE一搜就找到了,我就不在这里费口舌了。

     首先要下WIN下的MinGw和GTK+,最方便的是到SOURCEFORGE上去找auto MinGW和GTK+ FOR WIN32的包,下下来是可执行文件,一按好就全部OK了,我这里是自己下一个个的Win下的包,一个个解压安装的,安装方法我也不说了到GOOGLE上有很多的,这里解决一个问题,就是:

 

安装GLADE3后用其画一个简单的文本框,

关于以GLADE3的使用:

引用”简单为美“博客,这里对博主表示感谢




Glade是针对GTK+工具箱与GNOME桌面开发环境的快速图形界面开发工具.用Glade设计的用户接口以XML的文件形式保存,然后根据需要由程序通过libglade库文件来动态加载.因为使用了libglade库,Glade XML文件能够被C,C++,Java,Perl,Python,C#等等语言所支持.针对其他未涉及的语言的支持也是方便的.


在网上可以见到某些关于Glade的教程,大都是关于Linux平台和Glade 2的,因为原先Glade作为快速开发工具,集成代码生成功能,生成C文件.所以常常有初学者对网上某些教程所提及的"generate"(生成代码)功能表示迷惑,在新版本的Glade-3上找不到对应的功能.


新版本的Glade-3是对原先Glade代码的完全重写.一个显著的变化就是去除了代码生成功能.这样做是有原因的,即然代码生成功能不被提倡使用,而是更鼓励使用libglade功能.但是如果你真需要代码生成功能的话,它还是可以做为插件来提供的.另一个显著的不同是glade-3设计用来最大化使用GObject的自省机制(GObject introspection),来使外部工具箱和部件的控制,信号和属性的集成更加容易.


如果看过Say Hello to GTK+的话,可能感觉那样的窗体程序太简单了.那么现在让我们借助Glade弄点儿复杂一点儿的界面吧.首先来瞧瞧Glade长什么样,下图就是Glade在windows下的界面.左边的窗体的小部件选择器,相当于调色板.中间是主菜单,右边的是属性窗体.



现在开始创建一个类似于文本编辑器的图形界面.按照上图标注的顺序,依次添加window部件,vertical box部件,menu bar部件,text view部件和Status部件.vertical box设置三行,它是用来进行界面布局,分割空间用,这是gtk+设计与传统的windows UI设计很不同的地方.后三个部件是放置vertical box中的,最后设计完成图形如下.保存取名为win.glade.如果你感兴趣的话,可以用文件编辑器打开这个文件看看,正如所说的那样,它是一个xml格式的文本文件.


win


现在我们设置相关的头文件和库文件,编辑一个glade.c文件,添加进以下的代码,运行看看,会出现如上图的对话框.虽然这个对话框什么都不干,但是通过Glade,我们能较为容易地设计界面,而不用通过gtk函数,一个一个将控件实现.


保存为win.glade的XML文件。可以看到顶层的窗口物件被自动命名为window1;在codeblocks中建立GTK工程将main.c文件的内容改为


#include <gtk/gtk.h>
#include <glade/glade.h>
int main(int argc, char* argv[])
{
    GladeXML    *gxml;
    GtkWidget   *window;

 

    gtk_init (&argc, &argv);
    gxml = glade_xml_new ("win.glade",NULL,NULL);
    window = glade_xml_get_widget(gxml, "window1");
    g_object_unref (G_OBJECT (gxml));
    gtk_widget_show (window);
    gtk_main ();

 

    return 0;
}

编译,出现几个错误:

1、#include <glade/glade.h>里面的glade.h找不到

2、glade_xml_new 和glade_xml_get_widget有未定义的参数

(前提是你gtk中有libglade库和libxml2库,如果没有的话去sourceforge上去找到win版本下下来,也可以到MinGW的网站,然后进到Download里面,再找到相应的包下下来解压)

 

但是在MSYS下进入到项目的目录下,敲入gcc -o glade main.c `pkg-config --cflags --libs gtk+-2.0 libglade-2.0`竟然成功生成了glade.exe文件,运行一看正是那个画好的界面,哦!呵呵 看来并不是环境的原因,也不是程序的原因了,应该是codeblocks的设置问题了,继续到网上找答案,没办法中文资料太少了只要到codeblocks的官方论坛找了。

 

费率一番周折终于搞定了,呵呵其实很简单,引用论坛原帖:
EUREKA!!!!
adding in Project / Build options / linker/ other options


`pkg-config --cflags gtk+-2.0`
`pkg-config --libs gtk+-2.0`

 

WORKS !
thank you very much
原来就是把pkg-config的--cflags和--libs参数分开来写就可以了,注意这里是关键,网上很多介绍的方法并没有把它分成两次来写,而是像在Linux里一样写成一行了,写在一个``里面了,那样是不行的。

当然了在Project / Build options / compiler/ other options下面也是要加的呵呵!

文章评论0条评论)

登录后参与讨论
相关推荐阅读
huotingtu_505472073 2014-01-12 22:18
嵌入式程序员面试问题集锦
这个测试适于不同水平的应试者,大多数初级水平的应试者的成绩会很差,经验丰富的程序员应该有很好的成绩。为了让你能自己决定某些问题的偏好,每个问题没有分配分数,如果选择这些考题为你所用,请自行按你的意...
huotingtu_505472073 2011-04-14 23:24
【转】一种实用的步进电机驱动电路
1 引言步进电动机是一种将电脉冲信号转换成角位移或线位移的精密执行元件,由于步进电机具有控制方便、体积小等特点,所以在数控系统、自动生产线、自动化仪表、绘图机和计算机外围设备中得到广泛应用。微电子学的...
huotingtu_505472073 2011-04-14 23:22
【转】几种微型电机驱动电路分析
 以下所述电路用于3V供电的微型直流电机的驱动,这种电机有两根引线,更换两根引线的极性,电机换向。该驱动电路要求能进行正反转和停止控制。 电路一: 如下图所示,这电路是作者最初设计的电路,P1.3、P...
huotingtu_505472073 2011-02-18 19:57
【转】集成运放组成的电压比较器
1. 功能及应用:主要用来判断输入信号电位之间的相对大小,它至少有两个输入端及一个输出端,通常用一个输入端接被比较信号Ui,另一个则接基准电压VR 定门限电压(或称阀值)的UT。输出通常仅且仅有二...
huotingtu_505472073 2011-01-26 08:05
【转】直流无刷电动机工作原理与控制方法12
研究结果表明,在半导体薄片上产生的霍尔电动势E可用下式表示: 式中RH ——霍尔系数(  );IH——控制电流(A);B——磁感应强度(T);d——薄片厚度(m);p——材料电阻率(Ω*s);...
huotingtu_505472073 2011-01-26 07:55
【转】直流无刷电动机工作原理与控制方法1
序言   由于直流无刷电动机既具有交流电动机的结构简单、运行可靠、维护方便等一系列优点,又具备直流电动机的运行效率高、无励磁损耗以及调速性能好等诸多优点,故在当今国民经济各领域应用日益普及。   一个...
广告
我要评论
0
3
1
2
3
4
5
6
7
8
9
0
广告
关闭 热点推荐上一条 /3 下一条