【发布时间】:2014-07-25 01:41:27
【问题描述】:
通过the GTK+ book 中的第 10 章教程代码,我遇到了 glade 和解释输出之间的以下不一致。在我看来,工具栏(它是垂直对齐框中的第一个元素)设置为展开,但我专门禁用了它,而是为 GtkTreeView 启用了它,这是同一个中的第三个元素盒子。
林间空地:
应用:
这是相关的 Glade XML
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.3 -->
<interface>
<requires lib="gtk+" version="3.12"/>
[...]
<object class="GtkToolbar" id="toolbar1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_bottom">123</property>
<property name="toolbar_style">both</property>
<property name="show_arrow">False</property>
<property name="icon_size">2</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
[...]
</interface>
这个简单的main()正在加载哪个:
void on_back_clicked(GtkToolButton *button);
void on_forward_clicked(GtkToolButton *button);
void on_up_clicked(GtkToolButton *button);
void on_refresh_clicked(GtkToolButton *button);
void on_home_clicked(GtkToolButton *button);
void on_delete_clicked(GtkToolButton *button);
void on_information_clicked(GtkToolButton *button);
void on_go_clicked(GtkToolButton *button);
void on_location_activate(GtkEntry *entry);
void on_row_activated(GtkTreeView *treeview, GtkTreePath *treepath, GtkTreeViewColumn *column);
int main(int argc, char *argv[])
{
GtkWidget *window;
GtkBuilder *builder;
gtk_init(&argc, &argv);
builder = gtk_builder_new_from_file("browser.glade");
window = GTK_WIDGET(gtk_builder_get_object(builder, "applicationwindow1"));
gtk_builder_connect_signals(builder, NULL);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
运行应用程序时我也收到以下错误:
(browser:4672): Gtk-CRITICAL **: gtk_application_get_menubar: assertion 'GTK_IS_APPLICATION (application)' failed
关于其中任何一个发生了什么的任何提示?
【问题讨论】:
-
很难从一个巨大的 Glade 文件转储中分辨出来。书中缺少代码和参考代码,让人很容易说“你没有正确复制这本书”。您能否将 Glade 文件精简到相关部分,并包含您的代码的一些相关部分?
-
可能会破坏您的应用程序的一件事是 GTK 书适用于 GTK 2,而您的代码似乎使用的是 GTK 3。
-
西红柿 - 确实,先生。我一直在尽可能地关注差异,尽管在这种情况下,我想我只是不知道格莱德想让我做什么。至此,我已经从这个程序中添加了 main 函数。这只是获取小部件并连接信号(目前仅打印它们已被激活)。
-
为了进一步澄清:我只放空地输出的原因是因为它似乎只是包装细节的问题(元素扩展不正确)。但据我所知,包装选项设置正确。
-
删除内容,直到问题消失。添加内容,直到问题再次出现。如果您达到该状态,请尝试删除不相关的小部件(如在其他子树中)。然后发布那个完整的但更短的gtkbuilder/glade文件,我会简要地看一下。