Помогли на другом форуме, кому интересно:
У меня для Вас большой совет - НЕ ИСПОЛЬЗУЙТЕ LIBGLADE в своих проектах (даже учебных).
Для этого есть несколько причин:
1. Использование libglade создает лишнюю привязку к этой библиотеке, а она может быть не установлена на другой машине (в отличие от gtk+)
2. Основное назначение этой библиотеки - работа в самой среде Glade.
3. Так советуют сами разроботчики Glade и Gtk+
Но это не означает, что вы теряете возможность использование Glade xml для построения интерфейса. В Gtk+, начиная с версии 2.12, имеется особый компонент - GtkBuilder, используйте его. В примере, ниже, я покажу, как именно:
Код:
#include <gtk/gtk.h>
int main (int argc, char **argv)
{
GtkBuilder *builder; //объект, с помощью которого будет построен интерфейс пользователя
GtkWidget *mainwindow; //виджет - окно
GtkWidget *label; //виджет, с которым мы свяжем label в окне, для управления им
gtk_init(&argc, &argv); //инициализируем gtk
builder = gtk_builder_new (); //создаем новый GtkBuilder объект
gtk_builder_add_from_file(builder, "primer.xml", NULL); //загружаем описание интерфейса из XML файла
mainwindow = GTK_WIDGET(gtk_builder_get_object(builder, "mainwindow")); //связываем наше окно с окном из файла
label = GTK_WIDGET(gtk_builder_get_object(builder, "label")); //связываем наш label с label из файла
gtk_builder_connect_signals (builder, NULL); //подключаем сигналы
gtk_label_set_label((GtkLabel*)label, "Привет!"); //задаем текст для метки
gtk_widget_show (mainwindow); //показываем окно
gtk_main(); //запускаем главный цикл приложения
return 0;
}
void on_mainwindow_destroy (GtkObject *object, gpointer user_data) //обработчик сигнала закрытия главного окна
{
gtk_main_quit (); //выйти из главного цикла
}
Собственно, немного изменяется и содержимое файла-описания (я его, как видите, назвал primer.xml):
Код:
<?xml version="1.0"?>
<interface>
<requires lib="gtk+" version="2.16"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkWindow" id="mainwindow">
<property name="window_position">center</property>
<property name="default_width">400</property>
<property name="default_height">300</property>
<signal name="destroy" handler="on_mainwindow_destroy"/>
<child>
<object class="GtkLabel" id="label">
<property name="visible">True</property>
<property name="label" translatable="yes">label</property>
</object>
</child>
</object>
</interface>
Теперь, при создании нового проекта в Glade, выбирайте формат проекта GtkBuilder и сохраняйте как "файлы GtkBuilder")
Для компиляции используйте команду:
Код:
gcc primer.c -o primer -export-dynamic `pkg-config --cflags --libs gtk+-2.0`
Опция export-dynamic означает, что производится динамическое связывание сигналов объектов и обработчиков сигналов.
Функция on_mainwindow_destroy нужна для того, что бы программа закрывалась после закрытия окна, в противном случае будет закрываться только окно, но приложение будет оставатся запущенным и висеть в памяти.