GTK入门教程
1.GTK简介
GTK(GIMP Toolkit)是一套源码以LGPL许可协议分发、跨平台的图形工具包。最初是为GIMP写的,已成为一个功能强大、设计灵活的一个通用图形库,是GNU/Linux下开发图形界面的应用程序的主流开发工具之一。当然,GTK也是支持跨平台的,支持Unix类的系统、Windows,甚至手机平台。
GTK是使用C语言写的,所以其原生API都是面向C的,同时GTK的一大特点是,在C语言层面实现了面向对象的特性。GTK是完全免费的,而且基于LGPL协议,这可以保证私有软件通过链接使用GTK可以不把软件源代码开放,对商业应用较友好,这跟GPL协议是不一样的。也正是LGPL协议,使得早些年Gnome(基于GTK编写)风头胜过KDE(基于QT编写)。
GTK+ 从目前的发展趋势来看,越来越成为 Linux 和 GNOME 的 native toolkit,对于跨平台的考虑越来越少了。GNOME 目前仍是 Linux 平台最主流的桌面系统,而像 Pantheon、Cinnamon 等桌面也只是 GNOME 换了个壳,底层也是 GNOME 技术栈,所以 GTK+ 在这方面仍会大有发展。
2.GTK和GTK+
上面只是说了gtk,但我要学习的是gtk+。它们之间有什么关系呢?gtk+的作者之一PerterMattis说他原来开发的gtk包含了三套函数库, libglib、libgdk,和 libgtk,这些库没有采用面向对象机制,因而无法实现构件的复用,而且消息机制是使用标准的回调机制实现的,而非现在的gtk+所提供的信号机制。“+”是用来区分原始版本和新版本的。gtk+依然是完全使用C语言开发的,但在设计上灵活运用了面向对象设计(OOD)思想(谁说只有C++、java、C#这样的语言可以OOD 呢)。
3.Linux下第一个GTK程序
3.1 查看系统是否安装了GTK
pkg-config命令可查看安装库的详细信息。
3.2 第一个GTK程序示例
- 程序编译:
编译参数:
pkg-config --cflags gtk±2.0 列出include 目录,pkg-config --libs gtk±2.0列出编译连接库,也可以合在一起,像这样:pkg-config --cflags --libs gtk±2.0。
这里使用了“命令替换”。 命令替换(commandsubstitution)使得可以捕获一个命令的输出而在另一个命令中替换它。这个单引号不是回车键左边的那个,而是 ESC 键下面的那个。
- 连接时常用的库:
3.3相关函数接口介绍
- gtk初始化gtk_init
void gtk_init (int *argc, char ***argv)
函数功能: gtk初始化,会在每个gtk程序中调用。该函数设定了默认的视频(visual)和颜色映射模式(color map)。
- gkt主处理循环gtk_main
void gtk_main (void)
函数功能: 当程序运行到这里,GTK 会“睡着”等待 X 事件 (如按钮或键盘按下)、超时(timeouts)或文件 IO 通知发生。但是在调用gtk_main_quit函数以前,对gtk_main函数的调用并不返回,即使你关闭了窗口,程序仍然在运行(上述示例演示了此效果),在这种情况下,我们在调用gtk_main函数之前应该先建立回呼函数,而且设置GTK+使得在出现某些信号时转而执行应用软件,由应用软件接着进行处理。
-
参考资料:
1. GTK2.0+入门教程
2. GTK官网:https://www.gtk.org/