Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9167573
  • 博文数量: 1727
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 19860
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1727)

文章存档

2024年(3)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: 其他平台

2015-03-15 11:43:44

主程序代码.  其中 G_MODULE_EXPORT 很重要, 没有它, 信号链接会有问题.

点击(此处)折叠或打开

  1. /*
  2. * First , use glade UI design One xxx.glade file, add one window and signal handler.
  3. * compile this C file using command :
  4.                gcc -Wall -g -o tutorialpkg-config --cflags --libs gtk+-3.0` -export-dynamic
  5. */

  6. #include <stdlib.h>
  7. #include <gtk/gtk.h>

  8. static GtkBuilder *builder;
  9. static GtkWidget *window, *win_about;

  10. G_MODULE_EXPORT void on_window_destroy(GtkWidget *object, gpointer user_data)
  11. {
  12.     g_object_unref(G_OBJECT(builder));
  13.     gtk_main_quit();
  14.     g_print("exitted. \n");
  15. }

  16. G_MODULE_EXPORT void on_btn_show_about_clicked (GtkButton *button, gpointer user_data)
  17. {
  18.     win_about = GTK_WIDGET(gtk_builder_get_object(builder, "win_about"));
  19.     gtk_window_set_modal(GTK_WINDOW(win_about), TRUE);
  20.     gtk_widget_show_all (win_about);
  21. }

  22. int main (int argc, char *argv[])
  23. {
  24.     gtk_init(&argc, &argv);

  25.     builder = gtk_builder_new();
  26.     gtk_builder_add_from_file(builder, "../turtorial.glade", NULL);
  27.     window = GTK_WIDGET(gtk_builder_get_object(builder, "window"));
  28.     gtk_builder_connect_signals(builder, NULL);

  29.   /* Enter the main loop */
  30.   gtk_widget_show_all (window);
  31.   gtk_main ();
  32.   return 0;
  33. }

点击(此处)折叠或打开

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Generated with glade 3.18.3 -->
  3. <interface>
  4.   <requires lib="gtk+" version="3.12"/>
  5.   <object class="GtkWindow" id="win_about">
  6.     <property name="can_focus">False</property>
  7.     <property name="title" translatable="yes">这是一个about窗口</property>
  8.     <property name="modal">True</property>
  9.     <property name="destroy_with_parent">True</property>
  10.     <child>
  11.       <placeholder/>
  12.     </child>
  13.   </object>
  14.   <object class="GtkWindow" id="window">
  15.     <property name="can_focus">False</property>
  16.     <property name="title" translatable="yes">GTK+ Text Editor</property>
  17.     <signal name="destroy" handler="on_window_destroy" swapped="no"/>
  18.     <child>
  19.       <object class="GtkButton" id="btn_show_about">
  20.         <property name="label" translatable="yes">显示about窗口</property>
  21.         <property name="visible">True</property>
  22.         <property name="can_focus">True</property>
  23.         <property name="receives_default">True</property>
  24.         <signal name="clicked" handler="on_btn_show_about_clicked" swapped="no"/>
  25.       </object>
  26.     </child>
  27.   </object>
  28. </interface>

  1. 但是这样程序发布的时候需要把 demo 和 对应的 Glade文件全部发布出去, 能否只发布 demo, 把glade程序整合到代码中去呢。
  2. 答案是可以的。

编辑 demo.gresource.xml 文件

点击(此处)折叠或打开

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <gresources>
  3.   <gresource prefix="/org/gtk/demo">
  4.     <file preprocess="xml-stripblanks">demo.ui</file>    
  5.     <file preprocess="xml-stripblanks">demo2.ui</file>

  6.   </gresource>
  7. </gresources>
使用命令 glib-compile-resources demo.gresource.xml --target=resources.c --sourcedir=. --generate-source  
这样可以通过 把 XML 包含的 UI 文件整合成 resources.c 文件中。

工程中包含这个 resources.c 文件, 代码中使用 "/org/gtk/demo/demo.ui" 来指向 ui 对应的文件。 (xxx_set_template_from_resource 或者 gtk_builder_new_from_resource 等等)

例如:
GtkBuilder *builder;
builder = gtk_builder_new_from_resource ("/org/gtk/demo/demo.ui");

gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (class), "/org/gtk/exampleapp/window.ui");







阅读(2673) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~