GTK基础操作类

1 类型定义

  1. 整数类型:gint8、guint8、gint16、guint16、gint31、guint32、gint64、guint64。不是所有的平台都提供64位整型
  2. 整数类型gshort、glong、gint和short、long、int相同
  3. 布尔类型gboolean:gboolean可以取两个值:TRUE和FALSE
  4. 字符型gchar和char相同
  5. 浮点型gfloat和gdouble和float、double完全等价
  6. 指针gpointer对应于标准C的void*
  7. gconstpointer对于于标准C的const void*

2 glib宏

2.1 常用宏

整型与指针类型间的转换

  1. GINT_TO_POINTER(a):将int型转换成gpointer类型
  2. GPOINTER_TO_INT(a):将gpointer类型转换成int型
  3. GUINT_TO_POINTER(a):将uint类型转换成gpointer类型
  4. GPOINTER_TO_UINT(a):将gpointer类型转换成整型
  5. NULL宏的定义:#define NULL (void*)0(也就是说:0是一个整型数据,而NULL则是指针类型)

2.2 调试宏

前提条件检查(当定义了G_DISABLE_CHECKS时,前提条件检查宏在编译时就会消失)

断言(当定义了G_DISABLE_ASSERT后,断言宏在编译时就会消失,而不会加入生成的程序中)

所有调试宏使用g_log输出警告信息,g_log的警告信息包括发生错误的应用程序或库函数的名字。

2.3 判断构建是否是指定的构件

“ GTK_IS_构件名”系列宏用来判断构件是否是相应的构件
GTK_IS_BUTTON:用来判断构件是否是按钮

GTK_IS_NOTEBOOK:用来判断构件是否是笔记本构件

3 常用函数

  1. g_warning:在控制台输出一条警告信息
  2. g_error:在控制台输出一条错误信息后结束程序的执行
  3. g_print:在控制台输出一条信息
  4. g_object_unref(gpointer object):用来对object的引用数减1。当对object的引用数降为0时,删除object
  5. g_file_test:判断某个文件是否存在
  6. g_spawn_sync:创建一个子进程来运行外部程序。当子进程结束后,该函数才返回(同步的执行一个子进程)

4 内存管理

  1. g_malloc总是返回gpointer类型。如果申请失败,g_malloc将退出程序,所以不用检查返回值
  2. g_free忽略任何传递给它的NULL指针
  3. g_realloc函数和realloc函数功能相同
  4. g_malloc0:将分配的内存的每一个单元都置0

4 字符串处理

4.1 字符串操作

g_snprintf:用来格式化一个字符串,比sprintf函数安全
g_strcasecmp:实现两个字符串大小写不敏感的比较
g_strncasecmp:实现两个字符串的前n个字符大小写不敏感的比较

4.2 修改字符串

  1. g_strdown将字符串转换成小写字母
  2. g_strup将字符串转换成大写字母
  3. g_strreverse将字符串颠倒过来
  4. g_strchug删除字符串前的空格
  5. g_strchomp删除字符串尾的空格

4.3 字符串转换

  1. g_strtod:把字符串转换成gdouble类型
  2. g_strerror:将出错代码转换成描述出错代码的字符串
  3. g_strsignal:将信号值转换成描述信号的字符串

4.4 其他字符串转换函数

  1. g_strdup和g_strndup返回一个已分配内存的字符串或字符串前n个字符的拷贝
  2. g_strconcat用来连接两个字符串
  3. g_strsplit在每个分隔符处分隔分割字符串,并返回一个新分配的字符串

5 数据结构

5.1 链表

glib提供了普通的单向链表和双向链表,分别是GSList和GList。链表中的数据域是一个gpointer类型(通过GINT_TO_POINTER转换也可以使得链表中可以保存整型)。

g_list_pervious用在双向链表中来查找指定元素的前一个元素,该函数为双向链表中独有的函数。
注:这里只讲单向链表函数,其它双向链表函数只需要将单向链表函数名改为“g_list_名称”即可,也适用。
g_slist_append用来在单向链表中添加一个元素
g_slist_remove用来在单向链表中删除一个元素
g_slist_next用来获取指定元素的下一个元素
g_slist_prepend用来在链表表头插入数据
g_slist_reverse用来将链表中的元素反置
g_slist_insert用来在指定位置插入一个元素
g_slist_remove用来在删除指定的元素
g_slist_foreach对链表的每一项调用GFunc函数。GFunc函数的定义如下:void* GFunc(gpointer data,gpointer user_data)

5.2 树

在glib中有两种不同的树:GTree是基本的平衡二叉树,它将存储的数据按其值排序成二叉排序树

5.3 哈希表

6 GString

GString类似于标准C的字符串类型,但是GString能够自动增长,这些特性可以防止程序中的缓冲区溢出。下面是GString的定义:

struct GString{

gchar* str;   指向字符串数据的存储空间

gint len;     字符串的长度

}

  1. g_string_new(gchar* init):使用一个字符串来创建一个GString结构
  2. g_string_free(GString* string,gint free_segment):释放GString所占的内存
  3. g_string_assign(GString* lval,const gchar* rval):将字符串rval复制到lval,销毁lval原有的内容
  4. g_string_truncate:截取字符串来生成指定长度的字符串
  5. g_string_append:将字符串追加到指定字符串后面
  6. g_string_append_c:将字符追加到指定的字符串后面
  7. g_string_prepend:将字符串追加到指定的字符串前面
  8. g_string_prepend_c:将字符追加到指定的字符串前面
  9. g_string_sprintf:将一个格式化字符串写入到GString中

7.计时器函数

计数器函数可以用于为操作计时。使用过程如下:
  1. 使用g_timer_new创建一个计时器
  2. 使用g_timer_start来开始对操作计时
  3. 使用g_timer_stop来停止计时
  4. 使用g_timer_elapsed来判断计时器运行的时间
  5. 不用时,使用g_timer_destroy来销毁一个计时器
  6. 在使用过程中,还可以使用g_timer_reset来将计时器重新置零

8 错误处理函数

  1. g_strerror使用错误代码来获取一个描述错误的字符串。输出结果一般采用:“程序名:发生错误的函数名:文件或者描述”
  2. g_error打印一条出错信息,然后退出程序。其格式与printf相似,但在它的信息前面加上了“ERROR
  3. g_warning打印一条警告信息,与printf相似,但在它的信息前面加上“WARNING”,而且它不退出程序。通常用于不是太严重的错误
  4. g_message在输出的字符串前面加上了“message”,用来输出一条信息
  5. g_strsignal通过信号值获取描述该信号的字符串

9 其它实用函数

g_get_prgname:获取程序的名字
g_set_prgname:设置程序的名字
g_get_user_name:返回当前用户的名字
g_get_real_name:获取用户的真实名称
g_get_home_dir:获取用户的根目录
g_get_current_dir:获取当前工作目录
g_basename:获得文件名(不带前导目录部分)
g_dirname:返回文件名的前导目录部分
g_atexit:指定一个在正常程序中止时要执行的函数

g_assert(condition):判断条件是否满足,不满足则输出一条警告信息后退出程序的执行

1.g_return_if_fail(condition):如果条件为假,则输出一条警告信息后从当前函数立刻返回

2.g_return_val_if_fail(condition,retval):如果条件为假,则输出一条警告信息后,从当前函数返回,返回值为retval

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏冰霜之地

从 JavaScript 作用域说开去

在电脑程序设计中,作用域(scope,或译作有效范围)是名字(name)与实体(entity)的绑定(binding)保持有效的那部分计算机程序。不同的编程语言...

10830
来自专栏小樱的经验随笔

记一次拿webshell踩过的坑(如何用PHP编写一个不包含数字和字母的后门)

这一串代码描述是这样子,我们要绕过A-Za-z0-9这些常规数字、字母字符串的传参,将非字母、数字的字符经过各种变换,最后能构造出 a-z 中任意一个字符,并且...

20020
来自专栏Kevin-ZhangCG

[ Java面试题 ]基础篇之二

17550
来自专栏前端知识分享

第193天:js---Math+Error+Number+Object总结

8320
来自专栏Android点滴积累

adb shell 查看系统属性(用来判断特殊的操作系统)

一般来讲,在android程序开发中进行需要判断设备类型和系统版本 1、设备类型判断(android.os.Build.MODEL) 比如判断属于Google ...

306100
来自专栏C/C++基础

C++命名方式建议

一个大型项目,参与开发人员众多,每个人的编码风格迥异,为保持代码风格统一,提高代码可读性与可维护性,一个重要的约定就是命名方式。良好统一的命名方式能让我们在不需...

7440
来自专栏MasiMaro 的技术博文

C++继承

在封装的过程中,我们发现有很多地方有问题,比如我们在封装Windows API 的过程中,每个窗口都有各自的消息处理,而我们封装时不同的窗口要针对不同的消息而编...

9620
来自专栏AzMark

Python 学习笔记之类与实例

类 (class) 封装一组相关数据,使之成为一个整体,并使用一种方法持续展示和维护。

5310
来自专栏决胜机器学习

PHP面向对象核心(一)——序列化与魔术方法

PHP面向对象核心(一) (原创内容,转载请注明来源,谢谢) 一、对象存储——serialize与unserialize 对象是存储类的属性的键值对,类似于数...

430100
来自专栏猿人谷

《C++ primer》--第11章

习题11.1 algorithm头文件定义了一个count的函数,其功能类似于find。这个函数使用一对迭代器和一个值做参数,返回这个值出现次数的统计结果。编写...

20250

扫码关注云+社区

领取腾讯云代金券