GTK+-3.0编程 (五) GtkBuilder用于快速创建界面,它读取一个xml文件
2016-11-15 23:27
483 查看
http://www.cnblogs.com/rain-blog/p/gtk3-5.html
实践中表明,纯粹利用 gtk 函数来创建 UI 是很繁琐的事,需要编写很多代码。怎样才能快速统一的建立 UI 布局呢?
可喜的是 GTK 提供了一个 GtkBuilder 用于快速创建界面。它读取一个 xml 文件。按照 xml 文件中所描述的来创建界面。因此我们需要编写 xml 文件。
创建example.ui ,内容如下:
再创建源文件 example.c ,内容如下:
编译,运行:
运行结果如下:
实践中表明,纯粹利用 gtk 函数来创建 UI 是很繁琐的事,需要编写很多代码。怎样才能快速统一的建立 UI 布局呢?
可喜的是 GTK 提供了一个 GtkBuilder 用于快速创建界面。它读取一个 xml 文件。按照 xml 文件中所描述的来创建界面。因此我们需要编写 xml 文件。
创建example.ui ,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <interface> <object id="window" class="GtkWindow"> <property name="visible">True</property> <property name="title">GtkBuilder</property> <property name="border-width">30</property> <child> <object id="grid" class="GtkGrid"> <property name="visible">True</property> <child> <object id="print_hello" class="GtkButton"> <property name="visible">True</property> <property name="label">Button 1</property> </object> <packing> <property name="left-attach">0</property> <property name="top-attach">0</property> </packing> </child> <child> <object id="print_entry" class="GtkButton"> <property name="visible">True</property> <property name="label">Button 2</property> </object> <packing> <property name="left-attach">1</property> <property name="top-attach">0</property> </packing> </child> <child> <object id="entry" class="GtkEntry"> <property name="visible">True</property> </object> <packing> <property name="left-attach">0</property> <property name="top-attach">1</property> <property name="width">2</property> </packing> </child> </object> <packing> </packing> </child> </object> </interface>
再创建源文件 example.c ,内容如下:
#include <gtk/gtk.h> static void print_hello(GtkWidget *button , gpointer data); static void activate(GtkApplication *app , gpointer data); static void print_entry(GtkWidget * button , gpointer entry); int main(int argc , char **argv) { GtkApplication *app; int app_status; app = gtk_application_new("org.rain.example" , G_APPLICATION_FLAGS_NONE); g_signal_connect(app , "activate" , G_CALLBACK(activate) , NULL); app_status = g_application_run(G_APPLICATION(app) , argc , argv); g_object_unref(app); return app_status; } static void print_hello(GtkWidget *button , gpointer data) { printf("Hello,world!\n"); } static void print_entry(GtkWidget * button , gpointer entry) { const gchar *entry_buf; //获取输入框的内容,返回一个 const gchar 指针 , gchar 即是 char entry_buf = gtk_entry_get_text( GTK_ENTRY(entry) ); if('\0' != entry_buf[0]) printf("%s\n" , entry_buf); } static void activate(GtkApplication *app , gpointer data) { GtkBuilder *builder; GObject *window; GObject *button; GObject *entry; //创建一个 GtkBuilder 。 builder = gtk_builder_new(); //将描述 UI 的文件添加到 Builder 中。 gtk_builder_add_from_file(builder , "example.ui" , NULL); //可以用该函数获取 Builder 创建的对象,根据 example.ui 文件中设置的 object 的 id 来获取。 window = gtk_builder_get_object(builder , "window"); gtk_application_add_window(app , GTK_WINDOW(window)); //注意该函数返回的是一个指向 GObject 对象的指针。 button = gtk_builder_get_object(builder , "print_hello"); //设置按钮标签 gtk_button_set_label ( GTK_BUTTON (button) , "PrintHello"); g_signal_connect(button , "clicked" , G_CALLBACK(print_hello) , NULL); //获取输入框对象。 entry = gtk_builder_get_object(builder , "entry"); button = gtk_builder_get_object(builder , "print_entry"); gtk_button_set_label ( GTK_BUTTON (button) , "PrintEntry"); //调用 print_entry 时传递用户参数 entry 。 g_signal_connect(button , "clicked" , G_CALLBACK(print_entry) , entry); }
编译,运行:
gcc example.c `pkg-config --cflags --libs gtk+-3.0` ./a.out
运行结果如下:
相关文章推荐
- 从assets中读取xml文件再动态的创建界面
- GTK+-3.0编程 (二) 为创建的窗口添加一个按钮
- 设计一个学生类,其中包含学号、姓名、成绩等数据成员,创建学生对象并且倒入到文件file.txt,然后由文件读取到另一个学生对象并输出,试编程实现。
- 一个经过改良的XMLHelper(包含了序列化,反序列化,创建xml文件,读取节点,C#对象与xml文件的相互转换等等。)
- GTK+-3.0编程 (一) 创建一个空白的窗口
- Spring 3.0 学习-DI 依赖注入_创建Spring 配置-使用一个或多个XML 文件作为配置文件,使用自动注入(byName),在代码中使用注解代替自动注入,使用自动扫描代替xml中bea
- 判断XML文件是否存在,不存在就创建一个XMl文件,存在就在里面添加一条数据
- 如何用vc创建和读取xml文件??
- 利用缓存机制快速读取XML文件数据
- 用xmldocument创建一个Xml文件
- 这是一个关于XML文档的操作管理器XMLHelper类,类中包括XML文档的创建,文档节点和属性的读取,添加,修改,删除的方法功能的实现
- Delphi中如何进行HTTP编程,比如:发送一个XML文件给服务器?
- xml 文件的创建和读取代码
- 一个读取xml文件内容的类
- XML解析器可以读取、更新、创建、操作一个XML文档
- 在一个目录下边快速创建大量文件及目录(使用dos batch)
- 如何用vc创建和读取xml文件??
- 动态创建服务器控件,获取HTML输出(用于生成静态文件,简化页面,简化编程等)
- 在一个目录下边快速创建大量文件及目录(使用dos batch)
- 用xmldocument创建一个Xml文件