一、简介
虽然GTK+是Linux下的开发环境,因为其跨平台特性,有时候需要在Windows上用到它的。如下是在Windows10下配置GTK+的开发环境。
Gnome的开发基础结构是围绕一组函数库的,所有的内容都是用可移植的ANSI C语言写成的,可以用于所有类UNIX系统,与图形相关的函数库依赖于X Window系统。 Gnome函数库是最高层的。GTK+由两部分组成,GTK和GDK。 GTK层为C语言提供了一个对象模型,并为UI工具包提供了最基本的widget,它是上层GUI派生的基础。 GTK是依赖于GDK的,GDK是Xlib的一个底层包装,Xlib库直接与X服务器对话。 除了Xlib以外的任何部分都是基于GLib的,它是一个有用的C函数库,提供了很多实用程序和可移植的功能以及一组容易被C语言使用的容器。
一个Gnome程序使用多个库组成的层次结构: Gnome库在最高层,包括帮助例程,类和特殊的widget,并为应用程序提供一个基础架构。第二层是GTK,它是GTK+库的一部分。这个库提供了基本的工具包和widget来创建GUI应用程序。大多数GUI是直接用GTK编写的。GTK同时为Gnome库提供了一个功能强大的对象系统。 再下一层是GDK,它简单的对X函数库进行了包装,只有在我们进行特殊绘画或设置窗口的特殊属性的时候才会用到它. 最下面一层是Glib,它是C的一个实用程序库,包括可移植性和一些实用程序功能,以及一些容器类,例如:链表,可变数组,变长字符串,HASH(貌似是哈西表),缓存,一个事件循环和其他有用的结构。
二、详解
1、下载GTK+ 3.x
(1)进入GTK+的官方网站http://www.gtk.org/,点击Download,选择相应的版本进入。
(2)若要下载、解压、整理那些单独的文件,则不是很方便,所以就可以选择有”All-in-one bundles” 的链接,点击下载。
解压完成,复制到/etc/gtk(也可以自定义其他目录),可以看到一些目录文件夹,主要包括:bin、etc、include、lib、man、manifest、share、src。其中bin目录下主要包含一些可执行文件和动态链接库,lib目录主要包含一些库文件、include主要包含的是一些头文件。
注:最近可在windows下安装MSYS2(Minimal SYStem 2),它是一个MSYS的独立改写版本,主要用于 shell 命令行开发环境,同时它也是一个在Cygwin (POSIX 兼容性层) 和 MinGW-w64(从"MinGW-生成")基础上产生的,追求更好的互操作性的 Windows 软件。它集成了pacman和Mingw-w64的Cygwin升级版, 提供了bash shell等linux环境、版本控制软件(git/hg)和MinGW-w64 工具链。与MSYS最大的区别是移植了 Arch Linux的软件包管理系统 Pacman(其实是与Cygwin的区别)。参考:https://msys2.github.io/ 。
2、配置GTK
在/etc/gtk目录下有一个帮助文件:
- This is a bundle containing the GTK+ stack and its dependencies
- for Windows. As such it is nothing more than a combination of the
- individual packages it consists of. Here is a shortened list :
- - GTK+ 3.6.4 (patched) ;
- - GLib 2.34.3 ;
- - GDK-Pixbuf 2.26.5 ;
- - Pixman 0.26.0 ;
- - Cairo 1.10.2 (patched) ;
- - Pango 1.30.1 ;
- - ATK 2.6.0.
- Both run-time and developer packages are included.
- This bundle is intended for software developers and packagers. You are
- expected to know what to do with it, more or less.
- To use it, create some empty folder like "c:gtk", Using either
- Windows Explorer's built-in zip file management, or the command-line
- unzip.exe, available for instance at
- ftp://tug.ctan.org/tex-archive/tools/zip/info-zip/WIN32/unz552xN.exe
- unzip this bundle. Avoid Winzip! It is known to behave oddly.
- (But you presumably already did extract the files, as you are reading
- this file.)
- Then add the bin folder to your PATH. Make sure you have no other
- versions of GTK+ in PATH. Run:
- pkg-config --cflags gtk+-3.0
- and verify that it prints out something reasonable. Prepare Pango :
- pango-querymodules > c:gtketcpangopango.modules
- Prepare GDK-Pixbuf :
- gdk-pixbuf-query-loaders > c:gtklibgdk-pixbuf-2.02.10.0loaders.cache
- Prepare GTK+-IMModules :
- gtk-query-immodules-3.0 > c:gtklibgtk-3.03.0.0immodules.cache
- Run:
- gtk3-demo
- and verify that it works.
(1)配置环境变量
右键开始菜单--选择控制面板,切换到小图标或大图标模式选择“系统”,点击“高级系统设置”,选择“环境变量”,将”C:gtkin”加入到环境变量”Path”中。bin目录中包含有运行时所需的dll文件,其中也包括gtk-demo.exe示例程序。
(2)然后按照帮助文档执行pango-querymodules、gdk-pixbuf-query-loaders、gtk-query-immodules-3.0,接着运行GTK+的例子:
3、设置QtCreator环境
- #include <gtk/gtk.h>
- int main (int argc, char *argv[])
- {
- GtkWidget *window;
- GtkWidget *label;
- //初始化GTK+库
- gtk_init(&argc, &argv);
- //创建主窗口
- window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- //设置窗口大小
- gtk_widget_set_size_request(window,300,300);
- //设置标题
- gtk_window_set_title(GTK_WINDOW (window), "Hello World");
- //当窗口即将被销毁,停止主GTK+循环
- g_signal_connect(window, "destroy",G_CALLBACK (gtk_main_quit), NULL);
- //创建一个"Hello World"标签
- label = gtk_label_new("Hello, World");
- //将标签加入到主窗口
- gtk_container_add(GTK_CONTAINER (window), label);
- //设置窗口中的所有元素可见
- gtk_widget_show_all(window);
- //开始主循环,让它在那里休息,直到应用程序关闭
- gtk_main();
- return 0;
- }
- CONFIG += link_pkgconfig
- PKGCONFIG += gtk+-3.0
- #-------------------------------------------------
- #
- # Project created by QtCreator 2015-08-30T02:36:02
- #
- #-------------------------------------------------
- TARGET = helloworld
- TEMPLATE = app
- CONFIG += link_pkgconfig
- PKGCONFIG += gtk+-3.0
- #INCLUDEPATH += C:/gtk/include/gtk-3.0 C:/gtk/include/cairo C:/gtk/include/pango-1.0
- # C:/gtk/include/atk-1.0 C:/gtk/include/cairo C:/gtk/include/pixman-1
- # C:/gtk/include C:/gtk/include/freetype2 C:/gtk/include C:/gtk/include/libpng15
- # C:/gtk/include/gdk-pixbuf-2.0 C:/gtk/include/libpng15 C:/gtk/include/glib-2.0
- # C:/gtk/lib/glib-2.0/include
- #LIBS += -LC:/gtk/lib -lgtk-3 -lgdk-3 -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lpangocairo-1.0
- # -lpangoft2-1.0 -lfreetype -lfontconfig -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lm -latk-1.0
- # -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl
- SOURCES += main.cpp
- HEADERS +=
- #include <gtk/gtk.h>
- int main (int argc, char *argv[])
- {
- GtkWidget *window;
- GtkWidget *label;
- //初始化GTK+库
- gtk_init(&argc, &argv);
- //创建主窗口
- window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- //设置窗口大小
- gtk_widget_set_size_request(window,300,300);
- //设置标题
- gtk_window_set_title(GTK_WINDOW (window), "Hello World");
- //当窗口即将被销毁,停止主GTK+循环
- g_signal_connect(window, "destroy",G_CALLBACK (gtk_main_quit), NULL);
- //创建一个"Hello World"标签
- label = gtk_label_new("Hello, World");
- //将标签加入到主窗口
- gtk_container_add(GTK_CONTAINER (window), label);
- //设置窗口中的所有元素可见
- gtk_widget_show_all(window);
- //开始主循环,让它在那里休息,直到应用程序关闭
- gtk_main();
- return 0;
- }
4、运行
有时会出现启动错误:“无法定位程序输入点gzdirect于动态链接库zlib1.dll。原因是:安装某些软件在安装时,会将zlib1.dll放入C:WindowsSystem32文件夹中,就使目录中存在旧版本的zlib1.dll,虽然GTK+安装目录下的bin文件中自带zlib1.dll,但是会优先在System32文件夹中找dll文件,而这个旧版本的zlib1.dll就导致GTK+启动出错。解决方法:(1)将C:WindowsSystem32中的zlib1.dll重命名zlib1.dll.off或zlib1.dll.old等任意名字,或者直接删除,再启动GTK+就能正常打开了。但这种方法有可能导致其他程序不能正常启动。(2)将C:gtkin文件夹中的zlib1.dll复制到C:WindowsSystem32中,再启动GTK+就能正常打开了。新版本的zlib也可以保证以前程序的正常启动。
三、总结
(1)3.6.5及其最新的版本可以在网上找到http://developer.gnome.org/gtk3/。如果您正在寻找旧的GTK + 2系列磁带库,请参阅http://developer.gnome.org/gtk2/。
(2)若有建议,请留言,在此先感谢!
http://blog.csdn.net/taiyang1987912/article/details/48103049