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命令可查看安装库的详细信息。
$ pkg-config --list-all | grep gtk
gtk-sharp-3.0 Gtk - Gtk
gtk+-unix-print-2.0 GTK+ - GTK+ Unix print support
gtk+-x11-2.0 GTK+ - GTK+ Graphical UI Library (x11 target)
gtk+-2.0 GTK+ - GTK+ Graphical UI Library (x11 target)
若没有gtk,则在线安装
sudo apt-get install libgtk2.0-dev
3.2 第一个GTK程序示例
#include
int main(int argc,char *argv[])
{
/* GtkWidget 是构件的存储类型 */
GtkWidget *window;
/*每一个GTK程序都要调用*/
gtk_init(&argc, &argv);
/*创建一个新的窗口*/
window= gtk_window_new(GTK_WINDOW_TOPLEVEL);
/*设置窗口标题*/
gtk_window_set_title(GTK_WINDOW(window),"GTK Hello");
/*设置窗口大小*/
gtk_widget_set_usize(window, 200, 200);
/*显示窗口*/
gtk_widget_show_all (window);
/*所有的 GTK 程序必须有一个 gtk_main() 函数。
程序运行停在这里等待事件 (如键盘事件或鼠标事件) 的发生。 */
gtk_main();
return 0;
}
- 程序编译:
gcc main.c `pkg-config --cflags --libs gtk+-2.0`
编译参数:
pkg-config --cflags gtk±2.0 列出include 目录,pkg-config --libs gtk±2.0列出编译连接库,也可以合在一起,像这样:pkg-config --cflags --libs gtk±2.0。
这里使用了“命令替换”。 命令替换(commandsubstitution)使得可以捕获一个命令的输出而在另一个命令中替换它。这个单引号不是回车键左边的那个,而是 ESC 键下面的那个。
- 连接时常用的库:
• GTK 库(-lgtk),构件库,基于GDK。
• GDK 库(-lgdk),Xlib库的封装(wrapper)。
• gdk-pixbuf 库(-lgdk_pixbuf),图像处理库。
• Pango 库(-lpango),处理国际化文本。
• gobject 库(-lgobject),包含作为 GTK 基础的类型系统。
• gmodule 库(-lgmodule),动态运行库。
• GLib 库(-lglib),包含各种函数; GTK是基于 GLib 的,因此你总需要这个库。
• Xlib 库(-lX11),GDK 要使用。
• Xext 库(-lXext),包含共享内存位图和其它 X 扩展。
• math 库(-lm),数学库,这个被 GTK 因各种目的而使用。
3.3相关函数接口介绍
- gtk初始化gtk_init
void gtk_init (int *argc, char ***argv)
函数功能: gtk初始化,会在每个gtk程序中调用。该函数设定了默认的视频(visual)和颜色映射模式(color map)。
2.gkt主处理循环gtk_main
void gtk_main (void)
函数功能: 当程序运行到这里,GTK 会“睡着”等待 X 事件 (如按钮或键盘按下)、超时(timeouts)或文件 IO 通知发生。
但是在调用gtk_main_quit函数以前,对gtk_main函数的调用并不返回,即使你关闭了窗口,程序仍然在运行(上述示例演示了此效果),
在这种情况下,我们在调用gtk_main函数之前应该先建立回呼函数,而且设置GTK+使得在出现某些信号时转而执行应用软件,由应用软件接着进行处理。
审核编辑:汤梓红
-
Linux
+关注
关注
87文章
11196浏览量
208667 -
C语言
+关注
关注
180文章
7591浏览量
135770
发布评论请先 登录
相关推荐
评论