在 GTK 2 中,数据类型主要基于 GLib(GTK 的基础库),提供了一套跨平台的数据类型和工具函数。以下是 GTK 2 中常用的数据类型及其说明:
基础数据类型
(1) 整数类型
| 类型 | 
说明 | 
对应 C 类型 | 
示例 | 
| gint | 
带符号整数 | 
int | 
gint x = 42; | 
| guint | 
无符号整数 | 
unsigned int | 
guint y = 100; | 
| gint8, gint16, gint32, gint64 | 
固定位宽整数 | 
int8_t, int16_t, … | 
gint32 val = 123456; | 
| guint8, guint16, guint32, guint64 | 
无符号固定位宽整数 | 
uint8_t, uint16_t, … | 
guint16 port = 8080; | 
| glong | 
长整数 | 
long | 
glong big = 1L << 32; | 
| gulong | 
无符号长整数 | 
unsigned long | 
gulong flags = 0xFFFF; | 
(2) 浮点类型
| 类型 | 
说明 | 
对应 C 类型 | 
示例 | 
| gfloat | 
单精度浮点数 | 
float | 
gfloat pi = 3.14f; | 
| gdouble | 
双精度浮点数 | 
double | 
gdouble e = 2.71828; | 
(3) 布尔类型
| 类型 | 
说明 | 
对应 C 类型 | 
示例 | 
| gboolean | 
布尔值 | 
int(TRUE/FALSE) | 
gboolean is_ok = TRUE; | 
(4) 字符和字符串
| 类型 | 
说明 | 
对应 C 类型 | 
示例 | 
| gchar | 
字符 | 
char | 
gchar c = ‘A’; | 
| guchar | 
无符号字符 | 
unsigned char | 
guchar byte = 0xFF; | 
| gchar | 
字符串(UTF-8) | 
char | 
gchar *str = “Hello”; | 
| gunichar | 
Unicode 字符 | 
uint32_t | 
gunichar uc = L’你’; | 
指针和内存管理
| 类型 | 
说明 | 
示例 | 
| gpointer | 
通用指针(类似 void*) | 
gpointer data = malloc(100); | 
| gconstpointer | 
只读通用指针 | 
gconstpointer const_data = “Immutable”; | 
| GObject | 
GTK 对象基类指针 | 
GObject obj = G_OBJECT(button); | 
内存管理函数:
gpointer g_malloc(gsize n_bytes);      
void     g_free(gpointer mem);         
gchar   g_strdup(const gchar str);   
容器和数据结构
(1) 动态数组(GArray)
GArray *array = g_array_new(FALSE, FALSE, sizeof(gint));
g_array_append_val(array, 42);  
gint val = g_array_index(array, gint, 0);  
g_array_free(array, TRUE);      
(2) 链表(GSList, GList)
GSList *list = NULL;
list = g_slist_append(list, "Item1");  
list = g_slist_remove(list, "Item1");  
g_slist_free(list);                    
(3) 哈希表(GHashTable)
GHashTable *hash = g_hash_table_new(g_str_hash, g_str_equal);
g_hash_table_insert(hash, "key", "value");  // 插入键值对
gchar *val = g_hash_table_lookup(hash, "key");  // 查找
g_hash_table_destroy(hash);                   // 释放内存
GTK 对象类型
| 类型 | 
说明 | 
示例 | 
| GtkWidget | 
所有控件的基类 | 
GtkWidget button = gtk_button_new(); | 
| GtkWindow | 
窗口对象 | 
GtkWindow win = GTK_WINDOW(top_level); | 
| GtkButton | 
按钮控件 | 
GtkButton btn = GTK_BUTTON(button); | 
| GtkEntry | 
输入框 | 
GtkEntry entry = GTK_ENTRY(text_input); | 
类型转换宏:
GtkButton *btn = GTK_BUTTON(widget);  
if (GTK_IS_BUTTON(widget)) { ... }    
信号和事件相关类型
| 类型 | 
说明 | 
示例 | 
| gulong | 
信号连接ID | 
gulong handler_id = g_signal_connect(…); | 
| GCallback | 
回调函数类型 | 
void callback(GtkWidget*, gpointer); | 
| GdkEvent | 
事件结构体 | 
GdkEventButton event = (GdkEventButton*)ev; | 
信号连接示例:
g_signal_connect(button, "clicked", G_CALLBACK(on_click), NULL);