首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GtkBuilder忽略.ui文件

GtkBuilder忽略.ui文件
EN

Stack Overflow用户
提问于 2012-02-06 14:38:30
回答 3查看 2.2K关注 0票数 4

我正在尝试使用GtkBuilder和glade创建一个非常简单的GUI。为了达到这个目的,我遵循官方的Gtk+ 3参考手册的教程。与原始代码的唯一区别是,为了简单起见,我没有连接到小部件的信号(因此也删除了它们的回调函数):

代码语言:javascript
复制
#include <gtk/gtk.h>

int
main (int   argc,
      char *argv[])
{
  GtkBuilder *builder;
  GObject *window;
  GObject *button;

  gtk_init (&argc, &argv);

  /* Construct a GtkBuilder instance and load our UI description */
  builder = gtk_builder_new ();
  gtk_builder_add_from_file (builder, "builder.ui", NULL);


  gtk_main ();

  return 0;
}

本教程中使用的"builder.ui“文件如下所示:

代码语言:javascript
复制
        <interface>
  <object id="window" class="GtkWindow">
    <property name="visible">True</property>
    <property name="title">Grid</property>
    <property name="border-width">10</property>
    <child>
      <object id="grid" class="GtkGrid">
        <property name="visible">True</property>
        <child>
          <object id="button1" 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="button2" 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="quit" class="GtkButton">
            <property name="visible">True</property>
            <property name="label">Quit</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>

…一点问题都没有。程序编译并生成所需的窗口。但是,当我尝试使用我自己的.ui文件(由glade 3.10.0生成)时,我根本没有得到任何结果。应用程序进入主循环,不会出现任何窗口。我使用的GUI文件是:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<interface>
  <!-- interface-requires gtk+ 3.0 -->
  <object class="GtkWindow" id="Window">
    <property name="can_focus">False</property>
    <property name="border_width">15</property>
    <child>
      <object class="GtkLabel" id="fooLabel">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="label" translatable="yes">foobar</property>
      </object>
    </child>
  </object>
</interface>

我做错了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-06 15:11:32

您只需要读取xml文件,就需要一些操作UI内容的代码,例如在.ui中显示顶层窗口:

代码语言:javascript
复制
int main (int   argc, char *argv[])
{
  GtkBuilder      *builder; 
  GtkWidget       *window;

  gtk_init (&argc, &argv);

  builder = gtk_builder_new ();
  gtk_builder_add_from_file (builder, "tutorial.xml", NULL);
  window = GTK_WIDGET (gtk_builder_get_object (builder, "Window"));
  g_object_unref (G_OBJECT (builder));
  gtk_widget_show (window);                
  gtk_main ();

  return 0;
}
票数 5
EN

Stack Overflow用户

发布于 2012-02-07 07:43:42

您的UI文件和教程UI文件之间的区别是这一行,在GtkWindow小部件中:

代码语言:javascript
复制
<property name="visible">True</property>

没有它,你的窗口(和它里面的所有东西)都会被隐藏起来,所以“什么都没有发生”。窗户就在那儿,只是看不见而已。线

代码语言:javascript
复制
gtk_widget_show (window);

在nos的解决方案也解决了这个问题,但这就是为什么教程文件工作,而你的没有。

票数 4
EN

Stack Overflow用户

发布于 2015-01-14 14:29:29

我也有同样的问题,但是尝试了以上所有的方法,但都没有成功。

我已经习惯了Windows上的C++,但这是一个g++项目,在raspbian上是一个raspberry pi。

到目前为止,我唯一的解决方案是添加完整路径,如下所示

代码语言:javascript
复制
gtk_builder_add_from_file (builder, "/home/pi/Documents/tutorial.xml", NULL);

随后,我在编译器上包含了路径,但之后再次没有窗口。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9161776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档