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. Ресурсы и ссылки
Официальная документация GtkBuilder: https://docs.gtk.org/gtk3/class.Builder.html
Пример XML UI и туториалы: https://developer.gnome.org/gtk3/stable/gtk-building-ui.html
Glade UI Designer: https://glade.gnome.org/
GtkBuilder API Reference: https://developer.gnome.org/gtk3/stable/GtkBuilder.html
—