全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

GTK入门教程

时间:2022-11-23 11:17

人气:

作者:admin

标签: C语言  Linux  GTK 

导读:GTK(GIMP Toolkit)是一套源码以LGPL许可协议分发、跨平台的图形工具包。最初是为GIMP写的,已成为一个功能强大、设计灵活的一个通用图形库,是GNU/Linux下开发图形界面的应用程序的主流...

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++javaC#这样的语言可以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`
poYBAGN9kMCAGHdNAAAkSiEcees409.png#pic_center

编译参数:

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相关函数接口介绍

  1. 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+使得在出现某些信号时转而执行应用软件,由应用软件接着进行处理。

审核编辑:汤梓红

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信