GLib
  • Initial page
  • I. Концепция
    • Background
    • Типы данных и программирование
  • Динамическая система типов Glib
    • Введение
    • Функции копирования
    • Соглашения
    • Неинстанциируемые не классифицированные базовые типы
    • Инстанциируемые классифицируемые типы: объекты
    • Неинстанциированные классифицированные типы: Интерфейсы.
  • Основной класс GObject
    • Введение
    • Инстанциация объекта
    • Объектное управление памятью
    • Свойства объекта
  • Система сообщений GObject
    • Замыкания
    • Сигналы
  • II. Описание API
    • GType
    • GTypePlugin
    • GTypeModule
    • GObject часть 1
    • GObject часть 2
    • Enums and Flags
    • GBoxed
    • Generic Values
    • Parameters and Values часть 1
    • Parameters and Values часть 2
    • Parameters and Values часть 3, ага
    • Value arrays
  • III. Описание инструментов
    • glib-mkenums
    • glib-genmarshal
    • gobject-query
  • IV. Руководство
    • Как определить и реализовать новый GObject?
    • Объектные методы
    • Как определять и реализовывать Интерфейсы?
    • Как создавать и использовать сигналы
    • Как пользователи могут злоупотреблять сигналами (и почему некоторые думают что это хорошо)
  • V. Об инструментах
    • Об инструментах
  • GTK 4
    • GtkApplication и GtkApplicationWindow
    • Widgets
Powered by GitBook
On this page
  • Widgets (1)
  • GtkLabel, GtkButton and Gtkbox

Was this helpful?

  1. GTK 4

Widgets

Widgets (1)

GtkLabel, GtkButton and Gtkbox

GtkLabel

Мы сделали окно и показывали его на экране в предыдущем разделе. Теперь мы переходим к следующей теме, виджетам в окне. Самый простой виджет - GtkLabel. Это виджет со строкой внутри.

#include <gtk/gtk.h>

static void
on_activate(GApplication *app, gpointer user_data)
{
  GtkWidget *win;
  GtkWidget *lab;

  win = gtk_application_window_new(GTK_APPLICATION(app));
  gtk_window_set_title(GTK_WINDOW(win), "lb1");
  gtk_window_set_default_size(GTK_WINDOW(win), 400, 300);

  lab = gtk_label_new("Hello.");
  gtk_window_set_child(GTK_WINDOW(win), lab);

  gtk_widget_show(win);
}

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

  app = gtk_application_new("com.github.ToshioCP.lb1", G_APPLICATION_FLAGS_NONE);
  g_signal_connect(app, "activate", G_CALLBACK(on_activate), NULL);
  stat = g_application_run(G_APPLICATION(app), argc, argv);
  g_object_unref(app);
  return stat;
}

Сохраните эту программу в файл lb1.c. Затем скомпилируйте и запустите.

$ comp lb1
$ ./a.out

Окно с сообщением «Привет». появляется.

Там только небольшое изменение между pr4.cи lb1.c. Diff - хорошая программа для определения разницы между двумя файлами.

$ cd misc; diff pr4.c lb1.c
5a6
>   GtkWidget *lab;
8c9
<   gtk_window_set_title (GTK_WINDOW (win), "pr4");
---
>   gtk_window_set_title (GTK_WINDOW (win), "lb1");
9a11,14
> 
>   lab = gtk_label_new ("Hello.");
>   gtk_window_set_child (GTK_WINDOW (win), lab);
> 
18c23
<   app = gtk_application_new ("com.github.ToshioCP.pr4", G_APPLICATION_FLAGS_NONE);
---
>   app = gtk_application_new ("com.github.ToshioCP.lb1", G_APPLICATION_FLAGS_NONE);

Это говорит нам:

  • Добавлено определение переменной lab.

  • Название окна изменено.

  • Метка создается и присоединяется к окну.

Функция gtk_window_set_child (GTK_WINDOW (win), lab)делает метку labдочерним виджетом окна win. Будь осторожен. Дочерний виджет отличается от дочернего объекта. У объектов есть родительско-дочерние отношения, а у виджетов также есть родительско-дочерние отношения. Но эти два отношения совершенно разные. Не путайте. В программе lb1.c, labявляется дочерним виджетом win. Дочерние виджеты всегда находятся внутри своего родительского виджета на экране. Смотрите окно, появившееся на экране. Окно включает метку.

У окна winнет родителей. Мы называем такое окно окном верхнего уровня. Одно приложение может иметь два или более окна верхнего уровня.

PreviousGtkApplication и GtkApplicationWindow

Last updated 4 years ago

Was this helpful?

Скриншот этикетки