`
jinghuainfo
  • 浏览: 1527817 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

几则GTK+开发技巧

 
阅读更多

几则GTK+开发技巧

转载时请注明出处和作者联系方式:http://blog.csdn.net/absurd

作者联系方式:Li XianJing <xianjimli at hotmail dot com>

更新时间:2006-12-19

这两周在开发SMS应用程序,这是第一次用GTK+开发完整的应用程序。在这个过程中,学到一些小技巧,感觉挺有用的,这里做个笔记。

1. 使用g_object_set_data保存上下文信息。在Win32下,通过SetWindowLong (GWL_USERDATA)在HWND中保存上下文信息,这可以避免使用全局变量。我一直奇怪为什么GtkWidget没有提供类似的功能,难道他们都愿意使用全局变量吗?后来突然想起GObject提供了一个g_object_set_data函数,使用起来非常方便,而GtkWidget是GObject的子类,当然也可以使用了。

2. 避免TreeView在显示时布局,提高运行速度。ListBox是用TreeView实现的,它具有很强的灵活性,比如它允许不同行的高度可以不一样,为了计算整个显示的区域,它先要把所有行的高度计算一遍。但在大多数情况下,行的高度都是固定的,计算一遍完全是浪费时间。我们通过下列方法,设置行为固定高度,可以提高运行速度:

gtk_tree_view_column_set_sizing(col, GTK_TREE_VIEW_COLUMN_FIXED);

gtk_tree_view_set_fixed_height_mode(sms_list,TRUE);

gtk_cell_renderer_text_set_fixed_height_from_font(GTK_CELL_RENDERER_TEXT(text_render), 2);

3. 缓存图标,避免重复加载。自己去管理icon当然可以,不过比较麻烦,其实可以用g_object_set_data_full把icon放到object中去,它还可以自动释放icon,非常简单。

static GdkPixbuf* sms_listview_load_icon(GObject* object, const char* icon_filename)

{

GdkPixbuf* pixbuf = g_object_get_data(GTK_TREE_MODEL(object), icon_filename);

if(pixbuf == NULL)

{

pixbuf = create_pixbuf(icon_filename);

if(pixbuf != NULL)

{

g_object_set_data_full(GTK_TREE_MODEL(object), icon_filename,

pixbuf, (GDestroyNotify)g_object_unref);

}

}

return pixbuf;

}

4. 判断TextView中是否存在多字节字符。在短信中,只要存在一个多字节字符,就要通过unicodie发送,单条短信长度限制为70个字符。可以通过下列方法判断其中是否包含多字节字符:gtk_text_buffer_get_char_count() < strlen(gtk_text_buffer_get_text())。

5. 获取菜单项的文本内容。GtkMenuItem是GtkBin的子类,通过GtkBin. Child获得Label对象,然后通过gtk_label_get_text获得菜单项的文本内容。

~~end~~

分享到:
评论

相关推荐

    GTK+2.0 中文版(基于GNOME官方文档翻译)

    GTK+ 2.0 教程 译者: huzheng,konghui,ferry,carton,yang_yi,ddd,tingle 版本号: V_0.1.0 2002年 6 月25 日 本文是有关通过 C 语言接口使用 GTK ...编写 GTK 应用程序的技巧 投稿 鸣谢 教程的版权和许可声明

    用GTK 开发Linux 嵌入式GUI 应用程序

    摘 要 随着数字信息技术和网络技术的发展,人们已经进入数码时代。建立在它们基础之 上的嵌入式系统已经广泛地渗透到科学...本文将讨论开发嵌入式GUI 的技巧和用GTK 工具开发Linux 嵌入式 GUI 应用程序的方法和步骤。

    LINUX C编程从初学到精通 张繁

    第三部分为实践篇,共有5章,分别为5个不同的Linux平台下C程序开发的综合案例,向读者详细阐述了Linux文件操作、GTK+图形界面编程、Linux网络编程,以及基于Linux平台的嵌入式软件开发的方法和技巧。

    Linux C编程从初学到精通 part1

    第三部分为实践篇,共有5章,分别为5个不同的Linux平台下C程序开发的综合案例,向读者详细阐述了Linux文件操作、GTK+图形界面编程、Linux网络编程,以及基于Linux平台的嵌入式软件开发的方法和技巧。 本书是由作者...

    Linux C编程从初学到精通 part3

    第三部分为实践篇,共有5章,分别为5个不同的Linux平台下C程序开发的综合案例,向读者详细阐述了Linux文件操作、GTK+图形界面编程、Linux网络编程,以及基于Linux平台的嵌入式软件开发的方法和技巧。 本书是由作者...

    Linux C编程从初学到精通 part2

    第三部分为实践篇,共有5章,分别为5个不同的Linux平台下C程序开发的综合案例,向读者详细阐述了Linux文件操作、GTK+图形界面编程、Linux网络编程,以及基于Linux平台的嵌入式软件开发的方法和技巧。 本书是由作者...

    jythonfx:使用Jython + JavaFX轻松开发应用程序的简单技巧

    JythonFX PL:信息呐TEMAT instalacji我教程PO polsku zajdziecie ENG:使用Jython + JavaFX开发应用程序的简单技巧。 样品: 简单的单按钮应用程序(HelloJyFx.py) 简单的FXML应用程序(FXMLSample.py,FXMLSample...

    Linux程序设计 第4版.haozip01

    16.2.4 安装gnome/gtk+开发库 551 16.3 事件、信号和回调函数 554 16.4 组装盒构件 556 16.5 gtk+构件 559 16.5.1 gtkwindow 559 16.5.2 gtkentry 560 16.5.3 gtkspinbutton 563 16.5.4 gtkbutton 565 16.5....

    Linux程序设计 第4版.haozip02

    16.2.4 安装gnome/gtk+开发库 551 16.3 事件、信号和回调函数 554 16.4 组装盒构件 556 16.5 gtk+构件 559 16.5.1 gtkwindow 559 16.5.2 gtkentry 560 16.5.3 gtkspinbutton 563 16.5.4 gtkbutton 565 16.5....

    gnome-commander:https:gitlab.gnome.orgGNOMEgnome-commander的只读镜像

    开发人员专用 您可以在文件中找到创建Gnome Commander的人员的电子邮件地址。 发行包 Gnome CommanderFedora,Gentoo,Arch等版中。 贡献 主意 如果您想在程序中看到一些不错的东西,应该在提交功能请求之前先检查...

    LINUX系统开发技术详解---基于ARM

    3.5 调试器GDB的使用技巧.............................................................................................. 60 3.5.1 GDB调试器介绍...............................................................

    飞鸽传书(IPMessenger) 源码

     开发多年的飞鸽,在他的基础上增加了些许功能,例如语音对话,这里继续讨论FreeEIM(飞鸽传书),前几天,详细的了解了FreeEIM(飞鸽传书)的网络协议,详细分析并且实现了FreeEIM(飞鸽传书)的消息传递过程,这里就...

Global site tag (gtag.js) - Google Analytics