дабы вернутся к теме с таким объемным названием, помогие разрешить следующую проблему:
есть интерфейс, созданный при помощи glade.
Содержимое int.glade:
<?xml version="1.0"?>
<glade-interface>
<!-- interface-requires gtk+ 2.16 -->
<!-- interface-naming-policy project-wide -->
<widget class="GtkWindow" id="window1">
<property name="title" translatable="yes">window1</property>
<child>
<widget class="GtkNotebook" id="notebook1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<widget class="GtkLayout" id="layout1">
<property name="visible">True</property>
<child>
<widget class="GtkButton" id="button1">
<property name="label" translatable="yes">Записать настройки сети</property>
<property name="width_request">200</property>
<property name="height_request">40</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</widget>
<packing>
<property name="x">10</property>
<property name="y">10</property>
</packing>
</child>
</widget>
</child>
<child>
<widget class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="label" translatable="yes">page 1</property>
</widget>
<packing>
<property name="tab_fill">False</property>
<property name="type">tab</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<widget class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="label" translatable="yes">page 2</property>
</widget>
<packing>
<property name="position">1</property>
<property name="tab_fill">False</property>
<property name="type">tab</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<widget class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="label" translatable="yes">page 3</property>
</widget>
<packing>
<property name="position">2</property>
<property name="tab_fill">False</property>
<property name="type">tab</property>
</packing>
</child>
</widget>
</child>
</widget>
</glade-interface>
есть простенький код для проверки работы этого интерфейса:
#include <gtk/gtk.h>
#include <glade/glade.h>
int main (int argc, char **argv)
{
GladeXML *xml;
gtk_init(&argc, &argv);
glade_init();
xml = glade_xml_new("int.glade", "window1", NULL);
if (!xml) {
g_warning(" Error during creation interface ! ");
return 1;
}
glade_xml_signal_autoconnect(xml);
gtk_main();
return 0;
}
в результате на экран форма не загружается. До этого была ошибка типа "(nconfig:16430): libglade-CRITICAL **: glade_xml_build_interface: assertion `wid != NULL' failed", но нагуглил, что надо передавать функции glade_xml_new имя формы. задал (window1), ошибка исчезла из лога, но окно все равно не появляется.
Пользователь решил продолжить мысль [time]Sat Jul 3 13:47:58 2010[/time]:
вобщем и тут разобрался, руки прибить тому, кто писал инструкцию к glade вот тут:
http://symmetrica.net/gtk/а рабочий код с использованием GtkBuilder:
#include <stdlib.h>
#include <stdio.h>
#include <gtk/gtk.h>
#include <glade/glade.h>
GtkBuilder *builder; // GtkBuilder объект
GtkWidget *mainwindow; // Главное окно
int main (int argc, char **argv)
{
gtk_init(&argc, &argv);
builder = gtk_builder_new ();
gtk_builder_add_from_file(builder, "int_01.xml", NULL);
mainwindow = GTK_WIDGET(gtk_builder_get_object(builder, "MainWindow"));
gtk_builder_connect_signals (builder, NULL);
gtk_widget_show_all (mainwindow);
gtk_main();
return 0;
}