一、简介

虽然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目录下有一个帮助文件:

  1. This is a bundle containing the GTK+ stack and its dependencies
  2. for Windows. As such it is nothing more than a combination of the
  3. individual packages it consists of. Here is a shortened list :
  4. - GTK+ 3.6.4 (patched) ;
  5. - GLib 2.34.3 ;
  6. - GDK-Pixbuf 2.26.5 ;
  7. - Pixman 0.26.0 ;
  8. - Cairo 1.10.2 (patched) ;
  9. - Pango 1.30.1 ;
  10. - ATK 2.6.0.
  11. Both run-time and developer packages are included.
  12. This bundle is intended for software developers and packagers. You are
  13. expected to know what to do with it, more or less.
  14. To use it, create some empty folder like "c:\gtk", Using either
  15. Windows Explorer's built-in zip file management, or the command-line
  16. unzip.exe, available for instance at
  17. ftp://tug.ctan.org/tex-archive/tools/zip/info-zip/WIN32/unz552xN.exe
  18. unzip this bundle. Avoid Winzip! It is known to behave oddly.
  19. (But you presumably already did extract the files, as you are reading
  20. this file.)
  21. Then add the bin folder to your PATH. Make sure you have no other
  22. versions of GTK+ in PATH. Run:
  23. pkg-config --cflags gtk+-3.0
  24. and verify that it prints out something reasonable. Prepare Pango :
  25. pango-querymodules > c:\gtk\etc\pango\pango.modules
  26. Prepare GDK-Pixbuf :
  27. gdk-pixbuf-query-loaders > c:\gtk\lib\gdk-pixbuf-2.0\2.10.0\loaders.cache
  28. Prepare GTK+-IMModules :
  29. gtk-query-immodules-3.0 > c:\gtk\lib\gtk-3.0\3.0.0\immodules.cache
  30. Run:
  31. gtk3-demo
  32. and verify that it works.

(1)配置环境变量
      右键开始菜单--选择控制面板,切换到小图标或大图标模式选择“系统”,点击“高级系统设置”,选择“环境变量”,将”C:\gtk\bin”加入到环境变量”Path”中。bin目录中包含有运行时所需的dll文件,其中也包括gtk-demo.exe示例程序。

(2)然后按照帮助文档执行pango-querymodules、gdk-pixbuf-query-loaders、gtk-query-immodules-3.0,接着运行GTK+的例子:

3、设置QtCreator环境

(1)首先安装好QtCreator(具体参考网上教程)。
(2)新建空的QT项目,并添加cpp文件main.cpp
 
  1. #include <gtk/gtk.h>
  2. int main (int argc, char *argv[])
  3. {
  4. GtkWidget *window;
  5. GtkWidget *label;
  6. //初始化GTK+库
  7. gtk_init(&argc, &argv);
  8. //创建主窗口
  9. window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  10. //设置窗口大小
  11. gtk_widget_set_size_request(window,300,300);
  12. //设置标题
  13. gtk_window_set_title(GTK_WINDOW (window), "Hello World");
  14. //当窗口即将被销毁,停止主GTK+循环
  15. g_signal_connect(window, "destroy",G_CALLBACK (gtk_main_quit), NULL);
  16. //创建一个"Hello World"标签
  17. label = gtk_label_new("Hello, World");
  18. //将标签加入到主窗口
  19. gtk_container_add(GTK_CONTAINER (window), label);
  20. //设置窗口中的所有元素可见
  21. gtk_widget_show_all(window);
  22. //开始主循环,让它在那里休息,直到应用程序关闭
  23. gtk_main();
  24. return 0;
  25. }

(3)添加GTK的头文件和库(pro文件)

      在cmd中执行命令pkg-config --cflags gtk+-3.0添加到INCLUDEPATH中,执行命令pkg-config --cflags --libs gtk+-3.0添加到LIBS中。当然也可以使用更简单的方式:在pro文件中添加:
  1. CONFIG += link_pkgconfig
  2. PKGCONFIG += gtk+-3.0

最后的pro文件是:

  1. #-------------------------------------------------
  2. #
  3. # Project created by QtCreator 2015-08-30T02:36:02
  4. #
  5. #-------------------------------------------------
  6. TARGET = helloworld
  7. TEMPLATE = app
  8. CONFIG += link_pkgconfig
  9. PKGCONFIG += gtk+-3.0
  10. #INCLUDEPATH += C:/gtk/include/gtk-3.0 C:/gtk/include/cairo C:/gtk/include/pango-1.0 \
  11. #               C:/gtk/include/atk-1.0 C:/gtk/include/cairo C:/gtk/include/pixman-1  \
  12. #               C:/gtk/include C:/gtk/include/freetype2 C:/gtk/include C:/gtk/include/libpng15 \
  13. #               C:/gtk/include/gdk-pixbuf-2.0 C:/gtk/include/libpng15 C:/gtk/include/glib-2.0   \
  14. #               C:/gtk/lib/glib-2.0/include
  15. #LIBS += -LC:/gtk/lib -lgtk-3 -lgdk-3 -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lpangocairo-1.0 \
  16. #        -lpangoft2-1.0 -lfreetype -lfontconfig -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lm -latk-1.0  \
  17. #        -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl
  18. SOURCES += main.cpp
  19. HEADERS  +=
main.cpp的代码:
  1. #include <gtk/gtk.h>
  2. int main (int argc, char *argv[])
  3. {
  4. GtkWidget *window;
  5. GtkWidget *label;
  6. //初始化GTK+库
  7. gtk_init(&argc, &argv);
  8. //创建主窗口
  9. window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  10. //设置窗口大小
  11. gtk_widget_set_size_request(window,300,300);
  12. //设置标题
  13. gtk_window_set_title(GTK_WINDOW (window), "Hello World");
  14. //当窗口即将被销毁,停止主GTK+循环
  15. g_signal_connect(window, "destroy",G_CALLBACK (gtk_main_quit), NULL);
  16. //创建一个"Hello World"标签
  17. label = gtk_label_new("Hello, World");
  18. //将标签加入到主窗口
  19. gtk_container_add(GTK_CONTAINER (window), label);
  20. //设置窗口中的所有元素可见
  21. gtk_widget_show_all(window);
  22. //开始主循环,让它在那里休息,直到应用程序关闭
  23. gtk_main();
  24. return 0;
  25. }

4、运行

有时会出现启动错误:“无法定位程序输入点gzdirect于动态链接库zlib1.dll。原因是:安装某些软件在安装时,会将zlib1.dll放入C:\Windows\System32文件夹中,就使目录中存在旧版本的zlib1.dll,虽然GTK+安装目录下的bin文件中自带zlib1.dll,但是会优先在System32文件夹中找dll文件,而这个旧版本的zlib1.dll就导致GTK+启动出错。
        解决方法:(1)将C:\Windows\System32中的zlib1.dll重命名zlib1.dll.off或zlib1.dll.old等任意名字,或者直接删除,再启动GTK+就能正常打开了。但这种方法有可能导致其他程序不能正常启动。(2)将C:\gtk\bin文件夹中的zlib1.dll复制到C:\Windows\System32中,再启动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

GTK+浅谈之一Windows10下QtCreator中GTK+环境搭建(十几篇)的更多相关文章

  1. windows10环境下QtCreator中出现skipping incompatible xxx when searching for xxx 问题解决办法

    windows10环境下QtCreator中出现skipping incompatible xxx when searching for xxx 我再QtCreator中想导入一个外部库时,他提示不匹 ...

  2. 转:浅谈CSS在前端优化中一些值得注意的关键点

    前端优化工作中要考虑的元素多种多样,而合理地使用CSS脚本可以在很大程度上优化页面的加载性能,以下我们就来浅谈CSS在前端优化中一些值得注意的关键点: 当谈到Web的“高性能”时,很多人想到的是页面加 ...

  3. 浅谈Python在信息学竞赛中的运用及Python的基本用法

    浅谈Python在信息学竞赛中的运用及Python的基本用法 前言 众所周知,Python是一种非常实用的语言.但是由于其运算时的低效和解释型编译,在信息学竞赛中并不用于完成算法程序.但正如LRJ在& ...

  4. 【WebApi系列】浅谈HTTP在WebApi开发中的运用

    WebApi系列文章 [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi参数的传递 [04]详解WebApi测试和PostMan [05]浅谈W ...

  5. 工具的更新换代 总是要折腾一下Windows10下Java Web 开发环境的配置

    Windows10下Java Web 开发环境的配置 由于经常性遗忘,所以整理一下 Java Web 开发环境的搭建与配置,利人利己 主要分为以下几步,需要可以挑着看 Windows下 JDK 的下载 ...

  6. ubuntu下的c/c++环境搭建

    原文地址:http://www.cnblogs.com/hitwtx/archive/2011/12/03/2274556.html ubuntu下的c/c++环境搭建是比较简单,因为有apt和新立得 ...

  7. Sublime Text 3下C/C++开发环境搭建

    Sublime Text 3下C/C++开发环境搭建 之前在Linux Mint 17一周使用体验中简单介绍过Sublime Text. 1.Sublime Text 3安装 Ubuntu.Linux ...

  8. [转]MonkeyRunner在Windows下的Eclipse开发环境搭建步骤(兼解决网上Jython配置出错的问题)

    MonkeyRunner在Windows下的Eclipse开发环境搭建步骤(兼解决网上Jython配置出错的问题)   网上有一篇shangdong_chu网友写的文章介绍如何在Eclipse上配置M ...

  9. 转:Windows下的PHP开发环境搭建——PHP线程安全与非线程安全、Apache版本选择,及详解五种运行模式。

    原文来自于:http://www.ituring.com.cn/article/128439 Windows下的PHP开发环境搭建——PHP线程安全与非线程安全.Apache版本选择,及详解五种运行模 ...

随机推荐

  1. div宽度设置width:100%后再设置padding或margin超出父元素的解决办法

    div宽度设置width:100%后再设置padding或margin超出父元素的解决办法 一.总结 一句话总结:直接加上box-sizing:border-box;即可解决上述问题. 1.box-s ...

  2. php实现旋转数组的最小数字

    php实现旋转数组的最小数字 一.总结 1.题目描述定位法:掐准输入输出这两个关键词,然后题目意思就很清晰了 2.这个题目就是找数组的最小值 二.php实现旋转数组的最小数字 题目描述: 把一个数组最 ...

  3. boost::any的一般使用方法

    01.#include <iostream>    02.#include <list>    03.#include <boost/any.hpp>    04. ...

  4. spring(3)------控制反转(IOC)/依赖注入(DI)

    一.spring核心概念理解 控制反转: 控制反转即IoC (Inversion of Control).它把传统上由程序代码直接操控的对象的调用权交给容器.通过容器来实现对象组件的装配和管理. 所谓 ...

  5. 我的嵌入式Qt开发第一课——基于BBB和hmc5843三轴电子罗盘

    几次想照着课本系统地学习Qt,但我发现还是有详细问题驱动时学习比較快. 于是我给自己设定了这个任务: 读取HMC5843的三轴磁场强度值,计算出角度,并把角度用直观形式显示在图形界面上. 这里面涉及到 ...

  6. 编译nodejs及其源代码研究

    本文将从 源代码 研究nodejs 的原理.本质,探讨nodejs的应用场景,以及高性能开发实践指南. 文件夹: 第一节:编译node.js 第二节:源代码分析 进入主题:下面是在win7 64 下进 ...

  7. jsvc 启动java 在linux下的实现原理

    http://blog.csdn.net/raintungli/article/details/8265009 JSVC:http://commons.apache.org/proper/common ...

  8. Momentum(动量/冲量)的理解及应用

    1. 基本概念(Momentum vs SGD) Momentum 用于加速 SGD(随机梯度下降)在某一方向上的搜索以及抑制震荡的发生. GD(gradient descent) θt=θt−1−η ...

  9. TOP 10 ONLINE COMPILER

    Top 10 Online Compilers +1338 Tweet Share106 Share Pin 444 Shares Online compilers are one type of t ...

  10. 小强的HTML5移动开发之路(29)—— JavaScript回顾4

    一.变量的作用域 javascript脚本的执行过程分为两个阶段: 第一阶段,js引擎()先扫描整个javascript代码.当碰到<script>时,会先创建一个全局的活动对象,将< ...