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目录下有一个帮助文件:
- 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:\gtk\etc\pango\pango.modules
- Prepare GDK-Pixbuf :
- gdk-pixbuf-query-loaders > c:\gtk\lib\gdk-pixbuf-2.0\2.10.0\loaders.cache
- Prepare GTK+-IMModules :
- gtk-query-immodules-3.0 > c:\gtk\lib\gtk-3.0\3.0.0\immodules.cache
- Run:
- gtk3-demo
- 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环境
- #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;
- }
(3)添加GTK的头文件和库(pro文件)
- CONFIG += link_pkgconfig
- PKGCONFIG += gtk+-3.0
最后的pro文件是:
- #-------------------------------------------------
- #
- # 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:\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+环境搭建(十几篇)的更多相关文章
- windows10环境下QtCreator中出现skipping incompatible xxx when searching for xxx 问题解决办法
windows10环境下QtCreator中出现skipping incompatible xxx when searching for xxx 我再QtCreator中想导入一个外部库时,他提示不匹 ...
- 转:浅谈CSS在前端优化中一些值得注意的关键点
前端优化工作中要考虑的元素多种多样,而合理地使用CSS脚本可以在很大程度上优化页面的加载性能,以下我们就来浅谈CSS在前端优化中一些值得注意的关键点: 当谈到Web的“高性能”时,很多人想到的是页面加 ...
- 浅谈Python在信息学竞赛中的运用及Python的基本用法
浅谈Python在信息学竞赛中的运用及Python的基本用法 前言 众所周知,Python是一种非常实用的语言.但是由于其运算时的低效和解释型编译,在信息学竞赛中并不用于完成算法程序.但正如LRJ在& ...
- 【WebApi系列】浅谈HTTP在WebApi开发中的运用
WebApi系列文章 [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi参数的传递 [04]详解WebApi测试和PostMan [05]浅谈W ...
- 工具的更新换代 总是要折腾一下Windows10下Java Web 开发环境的配置
Windows10下Java Web 开发环境的配置 由于经常性遗忘,所以整理一下 Java Web 开发环境的搭建与配置,利人利己 主要分为以下几步,需要可以挑着看 Windows下 JDK 的下载 ...
- ubuntu下的c/c++环境搭建
原文地址:http://www.cnblogs.com/hitwtx/archive/2011/12/03/2274556.html ubuntu下的c/c++环境搭建是比较简单,因为有apt和新立得 ...
- Sublime Text 3下C/C++开发环境搭建
Sublime Text 3下C/C++开发环境搭建 之前在Linux Mint 17一周使用体验中简单介绍过Sublime Text. 1.Sublime Text 3安装 Ubuntu.Linux ...
- [转]MonkeyRunner在Windows下的Eclipse开发环境搭建步骤(兼解决网上Jython配置出错的问题)
MonkeyRunner在Windows下的Eclipse开发环境搭建步骤(兼解决网上Jython配置出错的问题) 网上有一篇shangdong_chu网友写的文章介绍如何在Eclipse上配置M ...
- 转:Windows下的PHP开发环境搭建——PHP线程安全与非线程安全、Apache版本选择,及详解五种运行模式。
原文来自于:http://www.ituring.com.cn/article/128439 Windows下的PHP开发环境搭建——PHP线程安全与非线程安全.Apache版本选择,及详解五种运行模 ...
随机推荐
- div宽度设置width:100%后再设置padding或margin超出父元素的解决办法
div宽度设置width:100%后再设置padding或margin超出父元素的解决办法 一.总结 一句话总结:直接加上box-sizing:border-box;即可解决上述问题. 1.box-s ...
- php实现旋转数组的最小数字
php实现旋转数组的最小数字 一.总结 1.题目描述定位法:掐准输入输出这两个关键词,然后题目意思就很清晰了 2.这个题目就是找数组的最小值 二.php实现旋转数组的最小数字 题目描述: 把一个数组最 ...
- boost::any的一般使用方法
01.#include <iostream> 02.#include <list> 03.#include <boost/any.hpp> 04. ...
- spring(3)------控制反转(IOC)/依赖注入(DI)
一.spring核心概念理解 控制反转: 控制反转即IoC (Inversion of Control).它把传统上由程序代码直接操控的对象的调用权交给容器.通过容器来实现对象组件的装配和管理. 所谓 ...
- 我的嵌入式Qt开发第一课——基于BBB和hmc5843三轴电子罗盘
几次想照着课本系统地学习Qt,但我发现还是有详细问题驱动时学习比較快. 于是我给自己设定了这个任务: 读取HMC5843的三轴磁场强度值,计算出角度,并把角度用直观形式显示在图形界面上. 这里面涉及到 ...
- 编译nodejs及其源代码研究
本文将从 源代码 研究nodejs 的原理.本质,探讨nodejs的应用场景,以及高性能开发实践指南. 文件夹: 第一节:编译node.js 第二节:源代码分析 进入主题:下面是在win7 64 下进 ...
- jsvc 启动java 在linux下的实现原理
http://blog.csdn.net/raintungli/article/details/8265009 JSVC:http://commons.apache.org/proper/common ...
- Momentum(动量/冲量)的理解及应用
1. 基本概念(Momentum vs SGD) Momentum 用于加速 SGD(随机梯度下降)在某一方向上的搜索以及抑制震荡的发生. GD(gradient descent) θt=θt−1−η ...
- TOP 10 ONLINE COMPILER
Top 10 Online Compilers +1338 Tweet Share106 Share Pin 444 Shares Online compilers are one type of t ...
- 小强的HTML5移动开发之路(29)—— JavaScript回顾4
一.变量的作用域 javascript脚本的执行过程分为两个阶段: 第一阶段,js引擎()先扫描整个javascript代码.当碰到<script>时,会先创建一个全局的活动对象,将< ...