GObject 学习笔记汇总

开始学习 Clutter,需要回顾 GObject 的知识。以前写了一系列的 GObject 笔记,现在汇总一下以便查阅。

  1. 要相信 GObject 是有用而且简单的
  2. 使用 GObject 库模拟类的数据封装形式
  3. GObject 子类对象的私有属性模拟
  4. GObject 子类私有属性的外部访问
  5. 温故而知新
  6. GObject 的子类继承
  7. 继承与接口
  8. GObject 对接口的模拟
  9. 函数指针、回调函数与 GObject 闭包
  10. GObject 的信号机制——概览
  11. GObject 子类对象的析构过程
  12. GObject 信号机制——信号的注册
  13. GObject 信号机制——信号的 Accumulator
  14. GObject 信号机制——信号的连接
  15. GObject 信号机制——信号的发射(未完成)
  16. GObject Introspection 的简单示例

 

GObject 信号机制——信号连接

文档 [1, 2] 讲述了 GObject 信号注册的相关细节,本文进一步分析信号与闭包的关联问题,即信号连接。

继续阅读

GObject Introspection 的简单示例

这段时间以来,一直在跟 GObject 死磕。除了有点枯燥与乏味之外,也没什么不适,就是一堆繁琐但还算是直观的 C 代码罢了。现在,我想让 GObject 单调的学习过程略微轻松一下。毕竟春天正在到来,窗外的迎春花已经怒放了。记得前段时间为自己开始学习 GObject 写了一篇序言“要相信 GObject 是有用并且简单的”,其中引用了 Thinker 的一篇文章“GObject Introspection 带来一些希望”。本文通过一个很小的实例,演示一下 GObject 程序如何通过 GObject Introspection 与 JavaScript 脚本进行结合。

继续阅读

GObject 信号机制——信号 Accumulator

在文档 [1] 中,从外围对 GObject 信号注册的过程进行了初步分析。生命不息,折腾不止,我们应当以  Adrian Hands 大叔为榜样。所以,本文继续解决文档 [1] 中遗留的问题,即 g_signal_new 函数的第 5 个与第 6 个参数的含义。

继续阅读

GObject 信号机制——信号注册

上一篇文档“GObject 的信号机制”只是挖了一个坑便结束了,本篇尝试填坑,不过也不敢有所保证。因为我也不确定会不会因为被 GObject 的信号内幕再次搞晕。

我们先老老实实的阅读 GObject 参考手册的“Concepts / Signal”部分,尽量多获得一些面上的认识。手册中最关键的一句话是:每一个信号在注册的时候都要与某种数据类型(包括 GObject 库中的内建类型或 GObject 子类类型)存在关联,这种数据类型的使用者需要实现信号与闭包的连接,这样在信号被发射时,闭包会被调用。这句话,意味着我们要使用 GObject 信号机制,那么就必须要完成两个步骤:第一个步骤是信号注册,主要解决信号与数据类型的关联问题;第二个步骤是信号连接,主要处理信号与闭包的连接问题。本文主要考察信号注册的大致过程。

继续阅读

GObject 子类对象的析构过程

在“GObject 的信号机制”文中,谈到 GObject 子类对象的析构过程分为两个阶段,第一阶段是 dispose,第二阶段是 finalize。之所以划分成两个阶段而不是一步到位的内存释放,一切皆因尴尬现实之所迫。

继续阅读

GObject 的信号机制——概览

手册所述,GObject 信号(Gignal)主要用于特定事件与响应者之间的连接,它与操作系统级中的信号没有什么关系。例如,当我向一个文件中写入数据的时候,我期望能够有一个或多个函数响应这个“向文件写入数据”的事件,这一期望便可基于 GObject 信号予以实现。

继续阅读

函数指针、回调函数与 GObject 闭包

本文首先复习一下基于 C 语言函数指针和回调函数的概念,进而学习 GObject 闭包的用法。这些知识都与面向对象程序设计基本上没有什么关系。

继续阅读

GObject 对接口的模拟

在文档 [1] 中谈到接口古已有之,但是类的继承赋予了它一些新的概念。本文结合实例,学习如何使用 GObject 库所提供的接口类型来表达这些概念。

继续阅读

GObject 的子类继承

在文档 [1] 中,我们构造了一个 KbBibtex 类,其构造过程看似挺复杂,但实际上只需要动手尝试一下,即可明白 GObject 子类化的各项步骤的意义与作用。许多事物之所以被认为复杂,是因为大家在观望。

本文沿用文档 [1] 中的那个 KbBibtex 示例,学习如何对其进行子类化,构造新类,即面向对象程序设计方法中类的继承。

继续阅读