GTK+浅谈之一Windows10下QtCreator中GTK+环境搭建(十几篇)

一、简介

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

[html] view plain copy

  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

[html] view plain copy

  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文件中添加:

[html] view plain copy

  1. CONFIG += link_pkgconfig
  2. PKGCONFIG += gtk+-3.0

最后的pro文件是:

[html] view plain copy

  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的代码:

[html] view plain copy

  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

时间: 2024-08-01 22:11:20

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

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

windows10环境下QtCreator中出现skipping incompatible xxx when searching for xxx 我再QtCreator中想导入一个外部库时,他提示不匹配 出现这种问题是因为QtCreator 和 MinGW 其中一个是32位 ,而另一个是64位, 将两者统一后便不会出现该问题!!! 原文地址:https://www.cnblogs.com/zz-1120-wtenlb/p/12602379.html

浅谈设计模式的学习(中)

在<浅谈设计模式的学习(上)>中我说到了设计模式的基石-----抽象思维.为什么需要抽象思维呢?因为越抽象就越不容易出错,就像有些领导人说话:坚持改革开放.但怎么算坚持改革开放呢,没有具体的标准,因事而异,所以就不容易违背这个坚持改革开放的原则了. 3.学习设计模式,要保持抽象的思维     什么是抽象思维呢?真的不好说,抽象的东西往往难以说明白,听了也难以搞明白,还是通过具体的例子来说吧 有这么一个学生请假的场景,如果请假时间一天以内则有班长批准就可以了,三天以内则需要老师批准,超过三天就得

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

前端优化工作中要考虑的元素多种多样,而合理地使用CSS脚本可以在很大程度上优化页面的加载性能,以下我们就来浅谈CSS在前端优化中一些值得注意的关键点: 当谈到Web的“高性能”时,很多人想到的是页面加载时间,但其实性能不仅仅是指加载时间,还包括浏览器性能.网络性能.开发效率.在Web前端开发中,性能是一个非常重要的需要考虑的点.本文将介绍一些开发原则和性能准则,这些都是提高Web前端性能的基础. 1. 开发原则 1.1 编写符合当代浏览器性能的代码如果想提高前端性能,就必须理解浏览器的工作原理,

浅谈加速因子在策略中的意义

他站链接:浅谈加速因子在策略中的意义 NO:01没有完美的交易系统,但是却有完美的交易哲学.交易哲学.交易策略和资金管理三者缺一不可,才能构成正期望的交易系统.投机依赖价格的移动获得盈利(低买高卖或高买更高卖).在上升或下降趋势中,价格虽然在整体上朝着一个方向移动,但中间也会有短暂的反方向移动.而在横盘过程中,价格的移动方向则显得相对"随机"一些. NO:02关于价格的移动,可以类比物理学中的运动.其中包括:位移距离.时间.速度等.价格的位移相对于时间的比率就是价格的速度.除了速度之外

浅谈logo在PPT设计中的运用

在工业设计范畴,特别是产品设计中常常会提到“形式跟随功用”,也就是说产品的外型是树立在产品功用的根底之上的,同样道理,在PPT设计中则演化为“形式跟随内容”,就是说页面的美化设计是为了更好的将内容向观众传达. 为此我们总结了PPT设计的三个原则,即“图示化”,“图标化”,“图表化” 以“图标化”为例,所谓图标,就是具有指代意义的图形符号,具有高度浓缩并快捷传达信息.便于记忆的特性.应用范围很广,软硬件网页社交场所公共场所无所不在,例如各种交通标志…… 在用户界面设计范畴中则为图标的形式,包括程序

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

Sublime Text 3下C/C++开发环境搭建 之前在Linux Mint 17一周使用体验中简单介绍过Sublime Text. 1.Sublime Text 3安装 Ubuntu.Linux Mint的软件管理器中已经能够找到Sublime Text 3,直接安装即可.或者去官网下载.deb或tarball安装包,手动安装. 2.Package Control管理器 ST最吸引我的第一点就是这个非常棒的扩展管理器!安装方法也很简单,在ST中按Ctrl+`进入ST的控制台,然后去官网上将

XE6移动开发环境搭建之IOS篇(7):在Mac OSX 10.8中安装Xcode4.6.3(有图有真相)

XE6移动开发环境搭建之IOS篇(7):在Mac OSX 10.8中安装Xcode4.6.3(有图有真相) 2014-08-23 21:37 网上能找到的关于Delphi XE系列的移动开发环境的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 在安装Xcode前,我们先了解下Mac下如何卸载U盘!在VM9下,同一时间内,一个物理设备只能由一个系统去独占,无论是物理机还是虚拟机.我们可以了解一下虚拟机加载U盘的规则:    1.在虚拟机中加载U盘时,会自动将U盘从Wind

XE6移动开发环境搭建之IOS篇(5):解决Windows和虚拟机下Mac OSX的共享问题(有图有真相)

XE6移动开发环境搭建之IOS篇(5):解决Windows和虚拟机下Mac OSX的共享问题(有图有真相) 2014-08-20 20:28 网上能找到的关于Delphi XE系列的移动开发环境的相关文章甚少,本文尽量以详细的内容.傻瓜式的表达来告诉你想要的答案. 在安装XE6 PAServer前,我们先解决Windows和虚拟机下Mac的文件共享问题,由于虚拟机和我们安装的XE6是同一台电脑,所以此问题很好解决.网上相传有很多的共享大法,但是在WIN7这种权限管制得过份的系统下显得相对复杂了,

XE6移动开发环境搭建之IOS篇(7):在Mac OSX 10.8中安装XE6的PAServer(有图有真相)

XE6移动开发环境搭建之IOS篇(7):在Mac OSX 10.8中安装XE6的PAServer(有图有真相) 2014-08-22 21:06 网上能找到的关于Delphi XE系列的移动开发环境的相关文章甚少,本文尽量以详细的内容.傻瓜式的表达来告诉你想要的答案. 在安装PAServer前,我们先配置一下MAC的IP,给定一个固定的内网IP,以便我们的XE6能更好地连接它!------------------------------------------------------------