Spec-Zone.ru › GTK 4.0

Начало работы с GTK

Основы
Привет, мир
Привет, мир на C
Укладка
Укладка кнопок
Пользовательское рисование
Рисование в ответ на входные данные
Создание пользовательских интерфейсов
Укладка кнопок с помощью GtkBuilder
Создание приложений
Тривиальное приложение
Заполнение окна
Открытие файлов
Меню
Диалоговое окно настроек
Добавление строки поиска
Добавление боковой панели
Свойства

GTK — это набор инструментов виджетов. Каждый пользовательский интерфейс, созданный GTK, состоит из виджетов. Это реализовано на C с использованием GObject, объектно-ориентированной структуры для C. Виджеты организованы в иерархии. Виджет окна является основным контейнером. Пользовательский интерфейс затем создаётся путём добавления кнопок, выпадающих меню, полей ввода и других виджетов в окно. Если вы создаёте сложные пользовательские интерфейсы, рекомендуется использовать GtkBuilder и его язык разметки, специфичный для GTK, вместо ручного сборки интерфейса. Вы также можете использовать графический редактор пользовательского интерфейса, например glade.

GTK является событийно-ориентированной системой. Набор инструментов следит за событиями, такими как щелчок по кнопке, и передает событие вашему приложению.

В этой главе представлена справочная информация для начала работы с программированием GTK. Предполагается, что GTK, его зависимости и компилятор C установлены и готовы к использованию. Если вам необходимо сначала собрать сам GTK, обратитесь к разделу «Компиляция библиотек GTK» в этом справочнике.

Для начала нашего знакомства с GTK мы начнём с очень простого приложения. Эта программа создаст пустое окно размером 200 × 200 пикселей.

Рисунок 1. Окно

A window

Создайте новый файл с указанным ниже содержимым, назвав его example-0.c.

#include <gtk/gtk.h>

static void
activate (GtkApplication* app,
          gpointer        user_data)
{
  GtkWidget *window;

  window = gtk_application_window_new (app);
  gtk_window_set_title (GTK_WINDOW (window), "Window");
  gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
  gtk_widget_show (window);
}

int
main (int    argc,
      char **argv)
{
  GtkApplication *app;
  int status;

  app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
  g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
  status = g_application_run (G_APPLICATION (app), argc, argv);
  g_object_unref (app);

  return status;
}

Вы можете скомпилировать программу выше с помощью GCC, используя:

gcc `pkg-config --cflags gtk4` -o example-0 example-0.c `pkg-config --libs gtk4`

Для получения дополнительной информации о том, как скомпилировать приложение GTK, см. раздел Компиляция приложений GTK в этом справочнике.

Все приложения GTK, конечно же, будут включать gtk/gtk.h, который объявляет функции, типы и макросы, необходимые для приложений GTK.

Даже если GTK устанавливает несколько заголовочных файлов, только верхнеуровневый заголовочный файл gtk/gtk.h может быть напрямую включён кодом сторонних разработчиков. Компилятор завершит работу с ошибкой, если любой другой заголовочный файл будет включён напрямую.

В приложении GTK функция main() предназначена для создания объекта GtkApplication и запуска его. В этом примере объявляется указатель GtkApplication с именем app и затем инициализируется с помощью gtk_application_new().

При создании GtkApplication необходимо выбрать идентификатор приложения (имя) и передать его в gtk_application_new() в качестве параметра. Для этого примера используется org.gtk.example. Для выбора идентификатора приложения см. это руководство. Наконец, gtk_application_new() принимает GApplicationFlags в качестве входных данных для вашего приложения, если ваше приложение потребует каких-то специальных условий.

Далее, сигнал activate подключается к функции activate() выше функции main(). Сигнал activate будет выпущен при запуске вашего приложения с g_application_run() в строке ниже. Вызов g_application_run() также принимает в качестве аргументов аргументы командной строки (количество argc и массив строк argv). Ваше приложение может переопределить обработку командной строки, например, для открытия файлов, переданных в командной строке.

Внутри g_application_run() сигнал activate отправляется, и мы затем переходим к функции activate() приложения. Здесь мы строим наше окно GTK, чтобы окно отображалось при запуске приложения. Вызов gtk_application_window_new() создаст новое окно GtkWindow и сохранит его в указателе window. Окно будет иметь рамку, строку заголовка и элементы управления окном в зависимости от платформы.

Заголовок окна устанавливается с помощью gtk_window_set_title(). Эта функция принимает указатель GtkWindow* и строку в качестве входных данных. Так как наш указатель window является указателем GtkWidget, нам нужно привести его к типу GtkWindow*. Но вместо приведения window через (GtkWindow*), window может быть приведён с помощью макроса GTK_WINDOW(). GTK_WINDOW() проверяет, является ли указатель экземпляром класса GtkWindow, перед приведением, и выводит предупреждение, если проверка не пройдена. Дополнительную информацию об этой соглашении можно найти здесь.

Наконец, размер окна устанавливается с помощью gtk_window_set_default_size(), а затем окно отображается GTK с помощью gtk_widget_show().

При закрытии окна, например, нажатием на X, вызов g_application_run() возвращает число, которое сохраняется в целочисленной переменной с именем status. После этого объект GtkApplication освобождается из памяти с помощью g_object_unref(). Наконец, возвращается целочисленное значение состояния, и приложение завершается.

Пока программа работает, GTK получает события. Обычно это события ввода, вызванные взаимодействием пользователя с вашей программой, но также и сообщения от диспетчера окон или других приложений. GTK обрабатывает их, и в результате на ваших виджетах могут испускаться сигналы. Подключение обработчиков для этих сигналов — это то, как вы обычно заставляете программу что-то делать в ответ на ввод пользователя.

Следующий пример немного сложнее и пытается продемонстрировать некоторые возможности GTK.

© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer-old.gnome.org/gtk4/4.0/gtk-getting-started.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API