Макет Glade не отображается при компиляции / Ошибка утверждения GTK_IS_APPLICATION

Просматривая код руководства главы 10 в книге GTK+, я столкнулся со следующим несоответствием между Glade и интерпретируемый вывод. Мне кажется, что панель инструментов (которая является 1-м элементом в вертикально выровненном поле) настроена на расширение, но я специально отключил это и вместо этого включил его для GtkTreeView, который является 3-м элементом в том же vbox.

Поляна:

скриншот поляны

Приложение:

скриншот приложения

Это соответствующий 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

Любые намеки на то, что здесь происходит на любом из них?


person musasabi    schedule 25.07.2014    source источник
comment
Трудно сказать только по гигантской свалке файлов Glade. Отсутствие кода и справочного кода из книги делает очень заманчивым сказать, что вы неправильно скопировали книгу. Не могли бы вы сократить файл Glade до соответствующих частей и включить некоторые соответствующие части вашего кода?   -  person ptomato    schedule 25.07.2014
comment
Одна вещь, которая может сломать ваше приложение, заключается в том, что книга GTK предназначена для GTK 2, а ваш код, похоже, использует GTK 3.   -  person ptomato    schedule 25.07.2014
comment
помидор - Действительно, сэр. Я следил за различиями так внимательно, как только мог, хотя в данном случае я думаю, что просто не знаю, чего хочет от меня Глэйд. К этому моменту я добавил основную функцию из этой программы. Это просто приобретение виджетов и подключение сигналов (которые просто печатают, что они активированы в данный момент).   -  person musasabi    schedule 25.07.2014
comment
Для дальнейшего разъяснения: причина, по которой я выложил только вывод поляны, заключалась в том, что это просто вопрос упаковки деталей (элементы расширяются неправильно). Но из того, что я могу сказать, параметры упаковки установлены правильно.   -  person musasabi    schedule 25.07.2014
comment
Сократите свой файл Glade, никто не будет читать огромное количество xml:foo.   -  person drahnr    schedule 25.07.2014
comment
Обязан. Единственная причина, по которой я выложил весь файл, заключается в том, что я не уверен, что будет, а что нет.   -  person musasabi    schedule 25.07.2014
comment
Удаляйте вещи, пока проблема не исчезнет. Добавляйте вещи, пока проблема не появится снова. Если вы дойдете до этого состояния, попробуйте удалить несвязанные виджеты (например, в других поддеревьях). Затем опубликуйте этот полный, но более короткий файл gtkbuilder/glade, и я кратко его рассмотрю.   -  person drahnr    schedule 25.07.2014
comment
О да. Это техника, которую я понимаю, но никогда не думал применять ее здесь. Спасибо.   -  person musasabi    schedule 25.07.2014


Ответы (1)


Ну, это было глупо. Как любой читающий сейчас, вероятно, может видеть, мне удалось добавить нижнее поле в 123 пикселя, как-то незаметно. Это был мой первый раз, когда я использовал Glade, и я немного устал, поэтому быстро запаниковал.

В любом случае, благодаря ptomato и drahnr за то, что указал мне правильное направление.

person musasabi    schedule 25.07.2014