Windows平台下Glade GTK开发环境的搭建

合集下载

如何在Windows XP系统下编译一个GTK 程序

如何在Windows XP系统下编译一个GTK 程序

如何在Windows XP系统下编译一个GTK+程序1.在Windows XP系统中安装GTK+开发环境如何在Windows XP系统中安装GTK+开发环境,请参考台湾良葛格个人网站中《GTK学习笔记》的“Windows下第一个GTK程序”一文。

2.编写源代码使用您喜欢的Windows编辑器编写如下源代码:#include <gtk/gtk.h>int main(int argc, char *argv[]){GtkWidget *window;gtk_init(&argc, &argv);window = gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_window_set_title(GTK_WINDOW(window), "Hello GTK+!");gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);g_signal_connect(GTK_OBJECT(window), "destroy",G_CALLBACK(gtk_main_quit), NULL);gtk_widget_show(window);gtk_main();return 0 ;}源代码编写完后,保存为gtkhello.cpp(或gtkhello.c)。

3.编译程序现在开始编译我们的源代码gtkhello.cpp(后面皆以gtkhello.cpp为例)。

首先编辑一个makefile文件,其内容如下所示:CC = gccMAINC = gtkhello.cppEXEC = gtkhello.exeCFLAGS = -mwindows -mms-bitfields -I D:/GTK/include/gtk-2.0-I D:/GTK/lib/gtk-2.0/include -I D:/GTK/include/atk-1.0-I D:/GTK/include/cairo -I D:/GTK/include/pango-1.0 -I D:/GTK/include/glib-2.0-I D:/GTK/lib/glib-2.0/include -I D:/GTK/include/libpng12LIBS = -L D:/GTK/lib -lgtk-win32-2.0-lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32-lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintlmain:$(CC) $(CFLAGS) $(MAINC) $(LIBS) -o gtkhello.exe其中,蓝色字体“D:/GTK”表示您安装GTK的目录(笔者将GTK+的头文件和库文件安装到D:\GTK目录下);绿色字体“-mwindows”为编译时选项,点击可执行程序时不会出现Console;红色字体部分应以“Tab”键开头,否则使用make命令时无法编译源程序。

Gtk-Glade编程详解资料

Gtk-Glade编程详解资料

By yfqGtk+/Glade编程(一)--简介 (1)Gtk+/Glade编程(二)--入门 (6)Gtk+/Glade编程(三)菜单和工具栏 (13)Gtk+/Glade 编程(四)布局管理 (23)Gtk+/Glade编程(一)--简介By unanao<sunjianjiao@>本文是我学习GTK+和glade3进行图形界面编程的一点学习心得的整理,主要是使用GTK+/Glade编程的文档较少,而且没有说名如何将二者联系起来,以及二者之间的关系。

本文通过比较使用Glade和不使用Glade进行GUI编程进行比较,找出二者的异同,从而可以为学习使用Glade进行GUI设计提供一点学习思路。

一、什么是GTK+首先,GTK+并不是一门编程语言,而是一个开发工具套件,或者说是一个开发库,用来进行跨平台GUI应用程序的开发,Linux,Windows或其它平台都能使用GTK+。

GTK+ 就好比Windows上的MFC 和Win32 API,JAVA 上的Swing和SWT,或者Qt(KDE 使用的Linux下GUI开发套件)。

尽管GTK+是用纯C语言编写的,但是提供了其它各种语言的捆绑,允许程序员选择自己喜欢的开发语言来开发GTK+ 应用程序,比如C++, Python,Perl,PHP,Ruby等等。

GTK+ 开发套件基于三个主要的库:Glib,Pango和ATK,当然我们只需关心如何使用GTK+ 即可,GTK+ 自己负责与这三个库打交道。

Glib 封装了大部分可移植的C 库函数(允许你的代码移植到Windows 和Linux 上运行)。

使用C 或C++时,将大量使用Glib 库函数,在我们用C 语言的具体实现过程中我会详细解释它们。

高级语言如Python 和Ruby 却不用担心Glib 的使用,因为它们有自己的标准库提供了相应的功能。

GTK+ 及相关的库时按照面向对象设计思想来实现的,至于这时如何实现的现在并不重要,不同的编程语言有不同的实现方法,重要的是要知道GTK+ 使用面向对象编程技术即可(是的,即使是C 实现的)。

win32下基于eclipse的GTK+编译环境

win32下基于eclipse的GTK+编译环境

win32下基于eclipse的GTK+编译环境GTK+是遵循LGPL协议的一个优秀的GUI类库.基于C语言开发,是GNOME的基础,也是Linux下 GUI程序的首选.同时,GTK+也是一个跨平台的GUI库,win32下写"原生"GUI程序(商业的和非开源的也都不需付费),GTK+都是一个不错的选择! 本文基于我的实践,介绍了windows下用eclipse/CDT 来搭建GTK+编译环境的步骤,并成功编译运行了GTK+的"hello world"程序! 希望对那些想在win32下开发GTK+程序的朋友能有所帮助. 转载请注明出处: http:// 1. 为什么俺选eclipse ?eclipse 是一个开源的优秀的IDE,主要是用于开发调试Java程序.同时它也是一个平台,通过CDT插件可以提供一个完整的C/C++开发环境.eclipse 的主页是 ,上面可以下载到最新的eclipse和CDT,而且还有中文语言包,相当的不错.开始也想过用其它的IDE,比如Dev-cpp (主页) ,可是它的编辑器只支持GBK中文编码,不支持UTF8. 而我们知道GTK+是支持国际化的,所有的c源文件最好是UFT8的. 如果.c文件是GBK编码,那么里面的中文,编译出来都是乱码.要想消除乱码,必须把文件中的所有中文string串通过下面这个函数来转换:g_locale_to_utf8("世界你好",-1,0,0,0)这样很是麻烦.而eclipse支持多种编码,选用utf8来编辑源文件,就没有中文乱码问题啦,很是方便,呵呵eclipse的跨平台性也是我选择它的一个重要原因! 我们知道,linux下vim,emacs对于我们这些习惯了win下的编辑器的来说,还是有点麻烦的. eclipse可以运行在linux等平台上,这样,我们就可以在linux下使用同一个IDE--eclipse来开发啦,这样降低了win程序员编写 linux程序的门槛,呵呵.嘻嘻,总之,eclipse备受业界好评,应该也不会让我们失望的!再说,熟悉了eclipse,以后学习java的话IDE也不用重新去适应啦,^_^2. win32下GNU 编译环境搭建eclipse和dev-cpp这些都是调用MinGW或者Cygin来编译调试C/C++程序的. 建议使用MinGW,它全称是Minimal GNU for Win,是GNU开发工具在win32平台上的一个移植,不同于Cygin,MinGW是原生的win32移植,不需要另外的POSIX模拟中间层的支持.另外MinGW项目也发布了一个最小的posix实现接口--msys,移植了很多linux下很方便的小工具,比如ls,vi,rvxt等等. MinGW项目的主页是我们可以在上面下载最新的MinGW-3.2.0-rc-3.exe 和MSYS-1.0.10.exe 这两个文件,安装的时候先安装Mingw,然后安装msys.安装完msys之后会跳出一个问题,选y (yes), 然后它问你是不是已经安装了MinGW, 选y,然后按它的例子输入MinGW的安装路径(比如c:/MinGW),这样msys就把这个路径mount到了安装路径的msys目录下,可以直接使用Mingw的那些工具了.好了.装好这两个以后我们就要eclipse编译c文件需要的gcc,gdb,make工具了.为了eclipse能找到它们,要把c:\MinGW\ bin目录加到windows的环境变量PATH中. 需要说明的是,c:\MinGW\bin目录下的make不是GNU 的make,而是mingw32-make.exe,这个是make在windows 下的版本,由于没有posix完整接口,这个make缺少一些标准make的功能,同时也有一些linux下make所不具备的功能. 因为我们后面要用到pkg-config来自动配置GTK+库的路径,这是mingw32-make.exe所不支持的. msys中提供的GNU make是可以的,为了使用它,我们还得把msys安装目录下的bin目录加到环境变量PATH中.3. 安装GTK+库的win32 portGTK在windows上的移植,目前常见的主要有两个项目:gimp-win和glade-win32,分别在上有各自的主页.前一个是官方的,不过GTK+-dev包不是完全打包好的,使用起来不是很方便,推荐用后一个.gimp-win的地址:/~tml/gimp/win32/downloads.html/projects/gimp-win/glade-win32的地址:/projects/gladewin32/去下载最新的gtk+-win32-dev 包,双击运行安装就好了.安装程序自动注册了环境变量,很方便.4. 安装eclipse和CDT到上下载eclipse和CDT,解压到同一个目录下,比如D:\eclipse ,运行eclipse.exe 即可注意的是: CDT要搭载对应的版本的eclipse使用,下载时候阅读说明选择正确版本的CDT即可5. 编译GTK+版的hello world程序.打开eclipse,file-> new-> project, 里面多了c和c++两种工程类型,选择c,建一个managed make c project(自动产生makefile文件).eclipse自动关联到c程序的视图,呵呵,真的是挺周到的.左边的工程文件夹那里选new,新建一个 c source file, 把下面的这个hello world 程序拷贝进去,并保存. #################################################################include <gtk/gtk.h>/* This is a callback function. The data arguments are ignored* in this example. More on callbacks below. */static void hello( GtkWidget *widget,gpointer data ){g_print ("Hello World\n");}static gboolean delete_event( GtkWidget *widget,GdkEvent *event,gpointer data ){/* If you return FALSE in the "delete_event" signal handler,* GTK will emit the "destroy" signal. Returning TRUE means* you don't want the window to be destroyed.* This is useful for popping up 'are you sure you want to quit?'* type dialogs. */g_print ("delete event occurred\n");/* Change TRUE to FALSE and the main window will be destroyed with* a "delete_event". */return TRUE;}/* Another callback */static void destroy( GtkWidget *widget,gpointer data ){gtk_main_quit ();}int main( int argc,char *argv[] ){/* GtkWidget is the storage type for widgets */GtkWidget *window;GtkWidget *button;/* This is called in all GTK applications. Arguments are parsed* from the command line and are returned to the application. */gtk_init (&argc, &argv);/* create a new window */window = gtk_window_new (GTK_WINDOW_TOPLEVEL);/* When the window is given the "delete_event" signal (this is given * by the window manager, usually by the "close" option, or on the* titlebar), we ask it to call the delete_event () function* as defined above. The data passed to the callback* function is NULL and is ignored in the callback function. */g_signal_connect (G_OBJECT (window), "delete_event",G_CALLBACK (delete_event), NULL);/* Here we connect the "destroy" event to a signal handler.* This event occurs when we call gtk_widget_destroy() on the window, * or if we return FALSE in the "delete_event" callback. */g_signal_connect (G_OBJECT (window), "destroy",G_CALLBACK (destroy), NULL);/* Sets the border width of the window. */gtk_container_set_border_width (GTK_CONTAINER (window), 10);/* Creates a new button with the label "Hello World". */button = gtk_button_new_with_label ("世界你好!");/* When the button receives the "clicked" signal, it will call the* function hello() passing it NULL as its argument. The hello()* function is defined above. */g_signal_connect (G_OBJECT (button), "clicked",G_CALLBACK (hello), NULL);/* This will cause the window to be destroyed by calling* gtk_widget_destroy(window) when "clicked". Again, the destroy* signal could come from here, or the window manager. */g_signal_connect_swapped (G_OBJECT (button), "clicked",G_CALLBACK (gtk_widget_destroy),G_OBJECT (window));/* This packs the button into the window (a gtk container). */gtk_container_add (GTK_CONTAINER (window), button);/* The final step is to display this newly created widget. */gtk_widget_show (button);/* and the window */gtk_widget_show (window);/* All GTK applications must have a gtk_main(). Control ends here* and waits for an event to occur (like a key press or* mouse event). */gtk_main ();return 0;}######################################################保存之后eclipse马上开始编译啦,有很多错误! 这是为什么啊?不要着急, 这主要是eclipse不知道GTK+的头文件路径,以及不知道与GTK的哪些库文件来连接. 解决这个问题有两种方法:1) 编辑makefile文件,把这些路径以参数-I(include路径) 和-l(gtk的lib文件) 的方式告诉gcc编译时候指定include路径,gcc的参数有(假定GTK装在c:\GTK目录下):-IC:/GTK/include/gtk-2.0 -IC:/GTK/lib/gtk-2.0/include -IC:/GTK/include/atk-1.0 -IC:/GTK/include/pango-1.0 -IC:/GTK/include/glib-2.0 -IC:/GTK/lib/glib-2.0/include连接时候需要指定GTK+ 的lib库,gcc的参数有-LC:/GTK/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl -liconv有了这些路径参数就可以成功编译了.编辑makefile文件需要有make的知识,容易出错,我们也可以在eclipse的project->properties(工程属性)然后选c/c++ build ,右边的tools setting 标签页里面来一个一个填上这些-I 路径和-l库,目录和库不少,所以这样也比较麻烦.2) 用pkg-config 工具来帮忙生成这些include路径和 lib库也可以用pkg-config 来帮忙生成1) 中繁琐的gcc参数.pkg-config在安装GTK+-dev 时候已经有了,不需要额外安装. 我们可以在cmd窗口中输入: pkg-config --cflags gtk+-2.0 输出的就是include路径的gcc参数, pkg-config --libs gtk+-2.0 输出lib库的gcc参数.这个工具使用起来相当方便,make文件可以写成这样: gcc -o hello.exe hello.c `pkg-config --cflags gtk+-2.0` `pkg-config --libs gtk+-2.0`然后make的时候,make命令就会自动用pkg-config的输出替换掉pkg-config命令(msys中的make.exe可以,而mingw32-make.exe不支持).下面我们就在eclipse里面指定这两个pkg-config命令,让eclipse帮我们生成的makefile可以找到GTK+ 的include文件和lib包.1) project->properties(工程属性),然后选c/c++ build ,右边的tools setting 标签页里面选GCC C++ Complier,这个项目下的选项供我们来设定一些gcc的编译参数.如下图所示选择Miscellanous, 把`pkg-config --cflags gtk+-2.0`填入other flags 的最后面. 如果还有其它选项也可以接在后面(后面我们还要添加一个-mms-bitfields选项).2)连接选项配置. 还是上图,选GCC C++ Linker, 其下的选项供我们配置连接选项.点击Miscellanous如下图所示在Other objects 里面填上`pkg-config --libs gtk+-2.0` 命令.(填上后eclipse会自动又加一个" ",点编辑,去掉这对引号).经我试验, 要是填在最上面的linker flags栏里面的话, `pkg-config --libs gtk+-2.0`选项是放在紧跟gcc后的第一个选项,make时候不会自动替换成它的输出(俺也不知道为何), 而other objects 里面的选项是放在gcc 命令的最后面的,make的时候就可以自动用输出替换,真是奇怪.呵呵.还有,如果想让编译出来的程序没有那个cmd的dos窗口,还需要加一个连接选项-mwindows (如上图中示).这个不管加上边还是下边都可以.点击apply以后,eclipse又开始自动编译啦.这下什么错误也没有了. 到目录树下debug目录下查看,多了hello.o 和hello.exe文件.双击hello.exe运行程序, 呓??? 出来了个错误窗口,说需要加-mms-bitfields 编译参数!!返回来加上这个参数(图1中所示),保存,自动编译,重新运行hello.exe,这下一切OK,我们的第一个GTK+程序诞生了,呵呵,太高兴了!!enjoy GTK! good lucy!。

glade3开发gtk程序入门教程

glade3开发gtk程序入门教程

glade3开发gtk程序入门教程2009-11-29 01:24Gnome下已开发出了Glade这一应用软件,它是传统界面设计工具Gtk/Gdk的扩展,能满足基于Gtk+库的图形用户界面可视化开发的基本需求。

一、Glade简介如果有一种软件能将图形界面的设计及时地展现于开发人员的面前,而且在设计完后能直接看到界面的外观效果,这样就使程序员的主要精力集中于应用程序核心功能的开发上,这就是所谓的可视化编程思想。

在Windows环境下,这种可视化的集成开发环境已有许多成熟的产品,如VC++、VB、PB、Delphi、C++Bulider等。

基于Linux 操作系统的软件并不丰富,但绝非一片空白,例如Borland公司推出的Kylix。

目前Gnome下已开发出了Glade这一应用软件,它是传统界面设计工具Gtk/Gdk的扩展,能满足基于Gtk+库的图形用户界面可视化开发的基本需求。

Glade可为你生成界面代码,基本过程如下:1.让Glade设计出界面元素,设置界面元素属性,为构件的信号设置回调函数;2.将其存为XML格式,观察并修改不符合要求的部分;3.编写应用其它部分代码,并在应用中载入Glade文件,编译C代码生成执行文件。

这种模式使设计界面与其它部分代码完全分开,并且有可能做到在对界面进行改动后不必对应用进行编译。

图形用户界面设计小组可不必关心应用程序的运行细节,同时编程人员也可以把他们的时间用于其它方面,而不需为界面的修改重复编写大量烦琐的Gtk+函数。

这种分工开发的形式符合软件工程的要求,对GUI 软件的开发也更方便。

二、使用Glade的预备条件在学习使用Glade之前,我们假设你已对Linux操作系统的基本运用有初步了解、熟悉rpm 包或gzip包的处理命令、对C语言有一定的了解,并熟悉消息处理编程机制。

以上基础是使用Glade的必备知识,如果读者在以上某些方面尚存不明之处可先查阅相关资料。

Windows安装GTK+图文说明

Windows安装GTK+图文说明

Windows安装GTK+图⽂说明⾸先去官⽅下载://官⽅⽹站/download/index.php//下载链接/gtk+-bundle_3.6.4-20131201_win64.zip/gtk+-bundle_3.6.4-20130921_win32.zip解压到c盘:。

/osfipin/看懂英⽂的话,那个⽂本⽂档⾥有安装说明。

To use it, create some empty folder like "c:\gtk", Using eitherWindows Explorer's built-in zip file management, or the command-lineunzip.exe, available for instance atftp:///tex-archive/tools/zip/info-zip/WIN32/unz552xN.exeunzip this bundle. Avoid Winzip! It is known to behave oddly.(But you presumably already did extract the files, as you are readingthis file.)Then add the bin folder to your PATH. Make sure you have no otherversions of GTK+ in PATH. Run:pkg-config --cflags gtk+-3.0and verify that it prints out something reasonable. Prepare Pango :pango-querymodules > c:\gtk\etc\pango\pango.modulesPrepare GDK-Pixbuf :gdk-pixbuf-query-loaders > c:\gtk\lib\gdk-pixbuf-2.0\2.10.0\loaders.cachePrepare GTK+-IMModules :gtk-query-immodules-3.0 > c:\gtk\lib\gtk-3.0\3.0.0\immodules.cacheRun:gtk3-demoand verify that it works.///osfipin/修改系统变量:重启电脑。

gtk、glade程序开发

gtk、glade程序开发

gtk/glade程序开发我已经安装好gtk2.0/glade2.10.0,系统环境 RH9准备用一个月的时间 对gtk编程做一个介绍,希望大家支持。

在windows下做开发,把做成的程序转移到Linux.(源代码不做任何修改,只要重新编译、连接一次即可)需要的开发工具:Dev-cpp 4.9.9.2 (进行C程序的编译、连接)Glade (进行图形界面设计)Gtk开发组件只需两个软件包:devcpp-4.9.9.2_setupgtk-win32-devel-2.6.8-rc1(包含glade和gtk开发组件)下载网址:,请按上面的版本下载,其它版本有bug。

下载软件并安装(先装devcpp-4.9.9.2_setup,再安装gtk-win32-devel-2.6.8-rc1,等出现dev-cpp选项时,选中它),接下来,来运行我们的第一个程序。

(点评:作者是在windows下开发移植到Linux下的,本人不推荐这种方法)第二节 读懂Glade生成的代码(一)在glade的源文件目录src下有7个代码文件,它们分别是:1> callbacks.c Glade生成的大部分空的回调函数所在的文件,你自己往里面添加代码2> callbacks.h (头文件)Glade生成的回调函数的定义文件4> interface.c Glade生成的界面源代码文件5> interface.h (头文件)Glade生成的界面的定义文件6> main.c 主函数7> support.c 支持文件8> support.h (头文件)支持文件在galde生成的devcpp目录里有2个文件1> config.h Glade 生成的配置文件2>gtk1.dev Glade 生成的devcpp工程文件(就是你保存时启的那个名子)。

不要被这么多的文件吓着,需要你自己编写代码的文件只有三个(其它文件不要动),它们是:main.c (一般只需做少量的修改)callbacks.h (一般只需做少量的修改,甚至不作修改)callbacks.c (函数的具体实现部分,你需要在这里编写一定量的代码)其中callbacks.c是你编写代码的主文件。

在Windows环境下配置dev-cpp 和GTK+开发环境

在Windows环境下配置dev-cpp 和GTK+开发环境

在Windows环境下配置dev-cpp 和GTK+开发环境虽然GTK+是Linux下的开发环境,因为其跨平台特性,有时候我们需要在Windows XP 上用到它的。

所以如何在Windows下配置GTK+的开发环境,是许多开发者的实际需求。

下面将环境的搭建过程简述如下:一、软件准备我们需要准备两个软件:C/C++编译环境和GTK+库1.我们这里采用的编译环境是使用MinGW编译器的免费的C/C++ IDE开发环境Dev-Cpp4.9.9.2,下载地址:/projects/dev-cpp/files/Binaries/)。

2.开发GTK+所需要的库以及配置程序GTK+2.0下载地址:/download/win32.php。

建议下载all-in-one bundle版本。

二、软件安装1.安装Dev-Cpp安装时选择默认项即可,默认安装在C:\Dev-Cpp。

启动软件可见到如图1界面。

图1 Dev C++启动界面2.安装Gtk+2.0 for Windows将下载的文件gtk+-bundle_2.24.10-20120208_win32.zip解压缩到c:\gtk目录下。

如果需要安装第三方软件,参考表1,表2。

表1 其他的第3方软件Package Version Downloadspixman 0.24.0 Dev Sourcespkg-config 0.26 Tool Dev Sourcesgettext-tools 0.18.1.1 Dev Sources表2 需要的第3方依赖软件Package Version DownloadsRun-time Dev Sourceszlib 1.2.5cairo 1.10.2 Run-time Dev SourcesRun-time Devlibpng 1.4.3Freetype 2.4.2 Run-time Dev SourcesRun-time Dev SourcesFontconfig 2.8.0expat 2.0.1 Run-time DevRun-time Dev Sourcesgettext-runtime 0.18.1.1三、环境配置1.设置windows环境设置Windows 的path环境变量,右键单击“我的电脑”–>“属性”–>“高级”–>“环境变量”–>“系统变量”,添加c:\gtk\bin,如图2所示。

Windows环境下配置Glade3和DEV C++开发环境

Windows环境下配置Glade3和DEV C++开发环境
4)在 Palette 里点击控制和显示下的 Button,在 Fixed 容器上点击,就在 Fixed 容器里 放置了一个按钮,将其名称属性改为 button,标签属性改为按钮,同样的你可以通过拖拽来 调节它的大小和位置。界面保存为 myfirstapp.glade。最后的设计和 Inspector 里的内容如图 8。
成后,无需设置环境变量,因为安装程序已经完成了全部设置工作,GTK+2.0 的开发包也 一并安装配置完成。安装 Dev-C++时选择默认项即可,建议安装在 C:\Dev-Cpp。Dev++软件 界面如图 1。
图 1 Dev C++启动界面 使用 Dev-C++开发 Gtk+程序需要进行编译器环境配置工作。首先,导出 Gtk+2.0 的编 译信息。在“开始-〉运行”中输入 cmd 进入 DOS 模式,使用 pkg-config 工具将 Gtk+2.0 的 编译信息导出。具体操作如图 2。命令如下:
Windows 环境下 Glade3+Dev C++开发平台搭建
一、准备开发环境 1.软件下载: Glade3 For windows 软件包和 Dev C++开发环境下载地址如下: Glade3 软件包/。 Dev C++开发环境/projects/orwelldevcpp/files/Setup%20Releases/ 2.软件安装: Glade3 安装,运行 glade3-3.6.7-with-GTK+.exe,安装路径建议修改为 c:\gtk+。安装完
图7 在 Inspector 中,选中刚新建的窗口,在下面的 Properties 里进行如下编辑: 1)常规标签下,将名称属性改为 window,将窗口标题改为 My First GladeApp; 2 ) 信 号 标 签 下 , 将 GtkWidget 类 中 的 delete-event 选 中 , 为 它 的 操 作 句 柄 选 择 gtk_main_quit,同样给 GtkObject 类中唯一的 destroy 选择 gtk_main_quit。 在 Palette 里点击容器下的固定的构件,然后在上一步新建的 window 中点击,这样就创 建好了一个容器,按照给 window 修改名字的方法将其改名为 fixed。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Windows平台下Glade GTK开发环境的搭建【@.1 MVVM设计模式与Glade】做上层软件开发的程序员可能对于MVVM模式比较熟悉,这是一种经典的软件设计模式,很好的将用户界面与后台处理之间分层开,通过属性、事件绑定这种统一的'接口'将软件重新组装起来,将原本看上去很混乱很冗余的软件开发流程抽象出来,以一种统一而又合理的思想来组织软件开发。

下面截自wiki的一幅图简单说明了MVVM模式的组织结构。

View层提供了人机交互界面,Model层则是处理实际逻辑操作、数据操作的核心,二者之间由ViewModel层来进行协调,即绑定(Binding)View层的操作和属性,请求Model执行并得到反馈结果。

MVVM模式在Windows平台下的WPF开发得到了很好的体现,而WPF开发中View层并不是用C代码,而是用XAML来描述的,这是以前的传统软件开发或是MFC 开发中所没有的。

在实际使用这种WPF开发时可以用Expression Blend来进行UI设计,这个软件专门而且仅仅生成一个XAML文件用于界面描述,而底层的逻辑代码直接连到Visual Studio中进行编写。

通过Blend画出的界面可以很好的释放你的创造力想象力,而其跟Visual Studio之间的无缝连接将MVVM模式演绎的淋漓尽致。

因此我开始考虑有没有一种更通用的工具,不仅仅局限于Windows平台,能在多数平台下用MVVM模式进行开发。

于是我发现了Glade与GTK的配合。

GTK是一个以纯C语言开发的图形库,同样适用于跨平台开发中。

对于做底层开发比较多的人来说看到纯C代码比较亲切,我也一直想用纯C,而不是Visual Studio中提倡的C#,进行软件开发。

单独使用GTK 非常棒,但是一个问题就在于,需要手写的代码太多了。

画一个按键,按键的布局,按键的事件,这些都需要自己一行行手写,而且还得留意代码的顺序。

而其中一个我觉得是很大的门槛在于,布局需要盲打,即,你只能先在脑中有个界面的想法,写好代码后才能看到界面的结果。

当然对于嵌入式设计中的很多界面设计都是盲打,比如uCGUI,但是如果有一个工具能像Visual Studio之类的集成开发环境一样能画界面,再生成代码,那开发的速度将大大提升。

Glade就很好的解决了这一问题。

Glade很像Expression Blend的作用,它仅仅生成一个xml文件,描述了界面是怎样布局的,界面上需要绑定那些事件(Signal)。

通过Glade+GTK开发的程序每次在运行时都会解析这个xml文件生成一个界面(是不是跟WPF一样~),main函数里的代码量大大减少,所需要的就是新建一个builder,解析这个xml,传给gtk中的窗口类型,再显示这个窗口,之后进入Gtk的主循环即可。

但是,Glade+GTK劣势于Blend的一个关键特性是,不支持属性绑定。

虽然GTK中的Glib在2.26以后就增加了GBinding,也就是属性绑定的支持,但是在Glade中却并没体现出属性绑定的设置,至少不能像Blend一样,每一个属性都可以方便的设置绑定。

在C代码中手动编写代码来进行绑定或许可以实现(有待测试),但是官方教程上并没有这一特性介绍,也没有像Blend中那样强调属性绑定的重要性。

这一特性的缺失导致Glade+GTK实现的MVVM有所残缺。

这篇文章的作者在进行向Glade和GTK中增加Binding的实现,可以参考他对于binding的描述。

不知道现在进展如何了。

不过话说回来,就算没有属性绑定也能写出一个好的界面出来不是?【@.2 软件准备】开发时所需的工具很简单,下面分开说明(也可以参考文章末尾打包好的所有模块下载):1.Gtk。

由于Gtk是跨平台的图形界面库,因此对于windows下的Gtk不见得是最新版本的,但是其功能也足够我们使用了。

在这个页面中可以找到Windows平台下的Gtk 库,我下载的时候windows版本的gtk只有2.24版本。

除开源代码,每个模块有两个下载分支,一个是Dev也就是开发时所需库和头文件,另一个是Run-time的动态链接库。

编译好的Gtk程序仅需将run-time的库解压到运行程序相同文件夹(或者可自己配置),即可将程序发布。

如果觉得一个个模块下载麻烦,可以下载all-in-one bundle,包含了Run-time和Dev版本。

下载后解压到任意位置即可,比如c:\gtk\下,编译时需要向环境变量中的PATH添加c:\gtk\bin就可以了。

2.Glade。

在官方网站可以下载到windows平台下的glade。

需注意下载的glade版本与gtk版本是否匹配,我下载时glade3.8.x版本支持gtk 2版本,3.14.x支持gtk 3版本。

由于前面下的gtk版本是2.24,这里下载glade需3.8.3版本。

3.需要一个在windows下的GNU编译器,也就是MinGW。

我在这篇博客中详细介绍了Windows下配置MinGW的方法,同样也有配置完整的打包下载,可以参考自行配置这里不再累述。

4.一个文本编辑器。

系统自带的文本编辑器就可以了,不过为了编辑代码方便,windows下我还是推荐Notepad++来编辑,请自行google下载最新版本即可。

当然为了有一个完整的IDE,可以使用Eclipse配置一个完善的开发环境,不过这里为了保持问题的简洁性暂且不考虑采用Eclipse。

【@.3 程序实例】保证所有软件下载安装完成,即Gtk解压,比如解压到C:\gtk\。

Glade 安装结束。

MinGW配置可用。

如果你采用前面提到我自行配置的MinGW注意仅需解压即可,比如解压到C:\MinGW\ 关于Glade的教程,可以参考下面链接:GTK+ and Glade3 GUI Programming Tutorial 但是需注意的是,这篇教程中的源代码在Windows下编译后不能很好的运行(也就是所有的事件不能正常绑定),并且其中的Glade版本比较低,用Glade生成的界面文件与我们的主程序代码联系在一起的步骤有变,所以仅仅参考其Glade的界面设计步骤即可。

打开glade,在左侧的Toplevels中新建一个Window,右侧的属性中将name改为mainWindow。

一般在GTK设计中需要新增一个Container来进行布局的调整,这里为了演示方便,就简单的拖动一个按钮在界面上就好了。

将按钮名字改为button_Click。

下面新建两个事件(Signal)。

在mainWindow中右侧属性栏切换到Signals一栏,找到GtkObject下的destroy,在Handler下选择on_mainWindow_destroy,这将作为这个控件销毁,也就是窗口关闭时的发出的信号。

另外一个按键的类似,切换到右侧属性栏的Signals,找到GtkButton中的clicked,选择Handler为on_button_Click_clicked。

这个作为点击按钮发送的信号。

保存这个界面设计为,比如Tutor1.glade,在任意目录下。

在同一目录下新建一个main.c文件,输入如下代码#include //Add G_MODULE_EXPORT to signal function prototype is important in Windows!!!//#defineG_MODULE_EXPORT __declspec(dllexport)static unsigned int clkcount;G_MODULE_EXPORT voidon_mainWindow_destroy(GtkObject *object, gpointeruser_data){ g_print('Quit Here!');gtk_main_quit();}//G_MODULE_EXPORT must beadd!!G_MODULE_EXPORT voidon_button_Click_clicked(GtkObject *object, gpointeruser_data){ clkcount++; g_print(' **ButtonClicked!** %d\n',clkcount);}int main (int argc, char*argv[]){ GtkBuilder *builder; GtkWidget*window; // clkcount=0; // gtk_init(&argc, &argv); builder = gtk_builder_new();gtk_builder_add_from_file(builder, 'Tutor1.glade', NULL);// window =GTK_WIDGET(gtk_builder_get_object(builder,'mainWindow')); //add the top window in the glade code gtk_builder_connect_signals(builder, NULL);g_object_unref(G_OBJECT(builder)); //gtk_widget_show(window); gtk_main(); return 0;}这既是运行一个Glade+GTK设计出的界面程序的最小代码,可以看到主函数里面的代码量相比于单纯用Gtk来编写少了许多。

注意到前面新建的两个信号,on_mainWindow_destroy和on_button_Click_clicked前面都加了G_MODULE_EXPORT进行修饰。

这是一个宏,在代码注释中写出了这个宏的展开。

如果不加它,则最后编译出的运行程序将会找不到对应的事件(handler)。

之后需要编译。

同文件夹下新建一个build.bat,输入如下代码(假设gtk 安装在c:\gtk\bin下,并且MinGW的路径为c:\MinGW\bin) @echo off::Set GTK for compile and runtime libsset PATH=C:\gtk\bin;%PATH%set PATH=c:\MinGW\bin;%PATH%(pkg-config --cflags --libs gtk+-2.0 )>tempset /p pkg=del temp::gcc -Wall -mwindows -g -o main main.c %pkg%gcc -Wall -g -o main main.c %pkg% 编译成功后,如果不在同文件夹下放置所有的运行库,则程序将无法运行。

相关文档
最新文档