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版本选择,及详解五种运行模 ...
随机推荐
- (五)RabbitMQ消息队列-安装amqp扩展并订阅/发布Demo(PHP版)
原文:(五)RabbitMQ消息队列-安装amqp扩展并订阅/发布Demo(PHP版) 本文将介绍在PHP中如何使用RabbitMQ来实现消息的订阅和发布.我使用的系统依然是Centos7,为了方便, ...
- 中小研发团队架构实践之RabbitMQ快速入门及应用
原文:中小研发团队架构实践之RabbitMQ快速入门及应用 使用过分布式中间件的人都知道,程序员使用起来并不复杂,常用的客户端API就那么几个,比我们日常编写程序时用到的API要少得多.但是分布式中间 ...
- html5+js压缩图片上传
最近在折腾移动站的开发,涉及到了一个手机里面上传图片.于是经过N久的折腾,找到一个插件,用法如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...
- [Angular Directive] Combine HostBinding with Services in Angular 2 Directives
You can change behaviors of element and @Component properties based on services using @HostBinding i ...
- mysql的四种启动方式
查看该版本的相应参数: mysqld --verbose --help 1.mysqld ./mysqld --defaults-file=/etc/my.cnf --user=mysql ...
- 真机测试时出现 could not find developer disk image问题
解决Xcode在ipad/iphone 系统真机测试时出现could not find developer disk image问题 原因:手机系统版本比xcode版本高,sdk不支持 方法:更新Xc ...
- erlang与c之间的连接
http://blog.chinaunix.net/uid-22566367-id-382012.html erlang与c之间的连接参考资料:网络资料作者:Sunny 在Programming ...
- 第三方微信支付,WAP、H5、APP、公众号支付的区别
你说一个微信支付被腾讯搞了N个版本出来,是技术问题还收费原因不得而知.公众号支付,H5(wap)支付,APP支付.看得小编一头雾水. 带点N个疑问? 1.公众号支付是在公众号里支付,支众号里引入的三方 ...
- Android Studio 如何打JAR包(修订版)
AndroidStudio项目打包成jar 前言:在eclipse中我们知道如何将一个项目导出为jar包,现在普遍AndroidStuido开发,这里一步一步详加介绍AS项目打包成jar,jar和ar ...
- Android Studio 报错Guest isn't online after 7 seconds 解决方案
最近使用真机模拟之后,再使用虚拟机就频繁出现这个问题; 解决步骤如下: 1.打开Android虚拟设备管理器, 2.查看Actoins栏下拉图标, 3.选择冷启动模式即可, 4.重启AVD正常;