首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GtkBuilder没有实现窗口小部件吗?

GtkBuilder没有实现窗口小部件吗?
EN

Stack Overflow用户
提问于 2011-11-28 04:15:24
回答 1查看 1.1K关注 0票数 0

我在一个C源代码中包含了一个简单的Glade文件。下面是有趣的部分:

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

  gdk_gl_init(&argc, &argv);
  // ... some OpenGL specific initializations

  builder = gtk_builder_new();
  gtk_builder_add_from_file(builder, "gui.ui", NULL);
  gtk_builder_connect_signals(builder, NULL);

  window = GTK_WIDGET(gtk_builder_get_object(builder, "main_window"));
  drawingArea = GTK_wIDGET(gtk_builder_get_object(builder, "drawing_area"));


  gtk_container_set_reallocate_redraws(GTK_CONTAINER(window), TRUE);
  gtk_widget_set_gl_capability(drawingArea, glConfig, NULL, TRUE, GDK_GL_RGBA_TYPE);
  // ...
}

如果我编译这段代码,我会得到这样的警告:

代码语言:javascript
复制
gtk_widget_set_gl_capability: assertion `!gtk_widget_get_realized (widget)' failed

如果我现在使用LibGlade而不是这段代码中的GtkBuilder (我保存了glade文件以便与Libglade兼容):

代码语言:javascript
复制
int main(int argc, char *argv[]) {
  GladeXML *xml;
  gtk_init(&argc, &argv);

  gdk_gl_init(&argc, &argv);
  // ... some OpenGL specific initializations

  xml = glade_xml_new("gui.glade", NULL, NULL);
  glade_xml_signal_autoconnect(xml);

  window = glade_xml_get_widget(xml, "main_window");
  drawingArea = glade_xml_get_widget(xml, "drawing_area");


  gtk_container_set_reallocate_redraws(GTK_CONTAINER(window), TRUE);
  gtk_widget_set_gl_capability(drawingArea, glConfig, NULL, TRUE, GDK_GL_RGBA_TYPE);
  // ...
}

所有工作正常且未出现错误。我尝试了几种方法来强制在GtkBuilder版本中实现drawing_area,但都不起作用。是不是有什么魔术我忘在这里了?

EN

回答 1

Stack Overflow用户

发布于 2012-09-21 21:36:17

将顶部窗口的Visible属性设置为False

在过去的几周里,我遇到了完全相同的问题。我使用gtkglext从glade2转换为glade3的glade xml文件不接受gtk_widget_set_gl_capability调用。在我读了这篇文章并与一个正常运行的文件进行了比较后(感谢Jose Commins ),我意识到顶部窗口上的visible属性被设置为True。将其更改为False,则一切正常。由于旧glade2文件中的所有顶部窗口都设置为True,因此这一定是默认设置。较新的软件将其设置为False。构建器必须在创建顶部窗口并将其标记为可见时对其进行初始化,这与旧的C代码做法不同,即等待创建函数被显式调用。

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

https://stackoverflow.com/questions/8288689

复制
相关文章

相似问题

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