当前位置:嗨网首页>书籍在线阅读

03-GTK+框架

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

16.2 GTK+框架

GTK+(以下简称gtk)是一个用C语言创建的跨平台GUI框架。由于是跨平台的,所以使用gtk开发的应用程序可以在大部分主流平台上运行,例如Windows、Linux或macOS。gtk项目最初是为开发用于Linux的GNU图像处理程序(GNU Image Manipulation Program,GIMP)而创建的,后来开源了。gtk也被许多其他软件项目所使用,例如许多Linux发行版上的Gnome桌面环境,会使用它构建一些实用程序。在架构方面,gtk由几个软件包组成,这些程序库协同工作,一起处理渲染所需的各种细节,并促进用户在应用程序中与窗口或小部件的交互,其中一些组件如下所示。

  • Glib :这是基本的核心库,提供了几种数据结构、可移植性包装器,以及运行时功能的接口,例如事件循环、线程支持、动态加载及对象系统。Glib本身由诸如提供对象模型的GObject和GIO之类的组件构成,GIO为I/O提供高级抽象。
  • Pango :它是一个提供文本渲染和国际化功能的程序库。
  • Cairo :这是一个 2D 图形库,负责在屏幕上绘制内容,并尝试在多个设备上保持一致性,以及处理硬件加速等细节。
  • ATK :ATK 是可访问性工具箱程序库,负责为屏幕阅读器、放大镜或替代性输入设备等提供可访问性。

gtk还有一个名为Glade的接口构建器,它为应用程序的快速开发提供一个gtk源代码框架。

gtk使用面向对象的模型来表示小部件和窗口,它利用GObject库来提供这种抽象。gtk-rs项目在Rust中使用gtk程序库,该项目包含的许多程序库都遵循与gtk软件包中的程序库相同的命名约定,并为这些程序库提供原生的C语言绑定。在gtk-rs项目包含的所有程序库中,我们将使用gtk程序库来构建应用程序。

gtk程序库提供了用于构建GUI的窗口和小部件系统,并尝试对与原生C程序库相同的API进行建模,但由于Rust中没有面向对象的类型系统,因此存在一些差异。gtk程序库中的小部件是智能指针类型。为了在使用API时保持灵活性,用户可以拥有大量的可变引用,类似于Rust内部提供的可变引用。gtk中的任何重要的小部件都继承自某些基本的小部件类型。Rust通过IsA特征在小部件中支持这种继承。例如,gtk::Lable小部件的impl为Label提供了impl IsA。此外,gtk中的大多数小部件彼此共享功能——gtk程序库为其所有小部件实现了特征扩展,例如适用于所有widgt类型的WidgetExt特征。大多数小部件如gtk::Button和gtk::ScrollableWindow都实现了WidgetExt特征。我们还可以通过Cast特征将小部件向上或向下转型为其层次结构中的其他小部件。经过简要的介绍之后,让我们开始用Rust编写一个桌面应用程序。