7. Глава 33. XML Быстрая справка (Cheat Sheets)

7.1. Введение

GTK использует XML-файлы в формате GtkBuilder для описания интерфейсов. Это позволяет отделить дизайн UI от кода.

7.2. Основы GtkBuilder XML

  • Корневой элемент: <interface>

  • Основные виджеты описываются как дочерние элементы <object>

  • Атрибут class определяет тип виджета (например, GtkWindow, GtkButton)

  • Атрибут id задаёт уникальный идентификатор для ссылки из кода

7.3. Пример простого окна с кнопкой

<?xml version="1.0" encoding="UTF-8"?>
<interface>
  <object class="GtkWindow" id="main_window">
    <property name="title">Пример окна</property>
    <child>
      <object class="GtkButton" id="my_button">
        <property name="label">Нажми меня</property>
      </object>
    </child>
  </object>
</interface>

7.4. Загрузка интерфейса из XML

GtkBuilder *builder = gtk_builder_new_from_file("interface.ui");
GtkWidget *window = GTK_WIDGET(gtk_builder_get_object(builder, "main_window"));
GtkWidget *button = GTK_WIDGET(gtk_builder_get_object(builder, "my_button"));

g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect(button, "clicked", G_CALLBACK(on_button_clicked), NULL);

gtk_widget_show_all(window);

7.5. Основные элементы

  • <interface> — корневой элемент

  • <object> — виджет или контейнер

  • <property> — свойство виджета (например, title, label, visible)

  • <child> — дочерний элемент контейнера

  • <signal> — связывает сигнал с обработчиком

  • <style> — применяет CSS стили (ограниченно)

7.6. Работа с сигналами в XML

Можно сразу связать сигнал с обработчиком:

<signal name="clicked" handler="on_button_clicked" swapped="no"/>

7.7. Поддерживаемые свойства

  • title — заголовок окна

  • label — текст кнопки или метки

  • visible — видимость (TRUE/FALSE)

  • hexpand / vexpand — расширение по горизонтали/вертикали

  • margin — отступы

  • spacing — расстояние между элементами (для контейнеров)

  • И многие другие, соответствующие API GTK

7.8. Советы

  • Используйте Glade или другой визуальный редактор для создания XML.

  • Имя id должно быть уникальным и осмысленным.

  • Обработчики сигналов должны быть определены в коде.

  • Для динамического доступа используйте gtk_builder_get_object().

  • Можно загружать несколько файлов UI и объединять интерфейс.

7.9. Ресурсы и ссылки