2009年3月18日星期三

GLADE/GTK在WIN下的编译

0

标签: GTK+ 软件开发
GLADE/GTK在WIN下的编译

哎,本来了自己是喜欢搞硬件的,偏偏这段时间实习却去了家软件为主的公司,现在成了一个菜鸟级的代码员了,离自己的梦想越来越远了。看来在工作之余确实要拿出时间来搞搞自己喜欢的东西才行。
这段时间在搞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的使用:
引用"简单为美"博客,这里对博主表示感谢
原文地址:http://www.cppblog.com/len/archive/2008/03/27/45548.aspx
Say Hello to Glade

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函数,一个一个将控件实现.

#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, "hello");
g_object_unref (G_OBJECT (gxml));
gtk_widget_show (window);
gtk_main ();

return 0;
}

保存为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下面也是要加的呵呵!

没有评论: