Чтение онлайн

на главную - закладки

Жанры

Основы программирования в Linux
Шрифт:

GTK_SIGNAL_FUNC(closeApp), NULL);

 adjustment = gtk_adjustment_new(100.0, 50.0, 150.0, 0.5, 0.05, 0.05);

 spinbutton = gtk_spin_button_new(GTK_ADJUSTMENT(adjustment), 0.01, 2);

 gtk_container_add(GTK_CONTAINER(window), spinbutton);

 gtk_widget_show_all(window);

 gtk_main;

 return 0;

}

Когда вы выполните программу, то получите кнопку-счетчик, ограниченную диапазоном значений 50–150 (рис. 16.9).

Рис. 16.9 

GtkButton

Вы уже видели виджет кнопки

GtkButton
в действии, но существует несколько виджетов, потомков
GtkButton
, с чуть большими функциональными возможностями, заслуживающими упоминания.

GtkButton

 +----GtkToggleButton

+----GtkCheckButton

+----GtkRadioButton

Как видно из иерархии виджетов, кнопка-переключатель типа

GtkToggleButton
— прямой потомок кнопки
GtkButton
, кнопка-флажок
GtkCheckButton
— кнопки-выключателя
GtkToggleButton
и то же самое для переключателя
GtkRadioButton
, причем каждый дочерний виджет предназначен для определенных задач.

GtkToggleButton

Виджет

GtkToggleButton
идентичен виджету
GtkButton
за исключением одной важной детали:
GtkToggleButton
обладает состоянием. Это означает, что кнопка-выключатель может быть включена или выключена. Когда пользователь щелкает мышью виджет
GtkToggleButton
, последний стандартным способом порождает сигнал
clicked
и изменяет (или "переключает") свое состояние.

API у виджета

GtkToggleButton
очень простой:

GtkWidget* gtk_toggle_button_new(void);

GtkWidget* gtk_toggle_button_new_with_label(const gchar* label);

gboolean gtk_toggle_button_get_active(GtkToggleButton *toggle_button);

void gtk_toggle_button_set_active(GtkToggleButton *toggle_button,

 gboolean is_active);

Наиболее интересные функции —

gtk_toggle_button_get_active
и
gtk_toggle_button_set_active
, которые вы вызываете для чтения и установки состояния кнопки-выключателя. Если характеристика функционирования равна
TRUE
, это означает, что кнопка-выключатель
GtkToggleButton
включена.

GtkCheckButton

Кнопка-флажок

GtkCheckButton
— это замаскированная кнопка-выключатель
GtkToggleButton
. Вместо скучного прямоугольного отображения
GtkToggleButton
кнопка
GtkCheckButton
выводится как привлекательный флажок с расположенным рядом текстом. Функциональных различий между ними нет.

GtkWidget* gtk_check_button_new(void);

GtkWidget* gtk_check_button_new_with_label(const gchar *label);

GtkRadioButton

Эта кнопка немного отличается от предыдущих, т.к. может группироваться с другими кнопками того же типа. Переключатель (или радиокнопка)

GtkRadioButton
— одна из тех кнопок, которые позволяют выбирать только один вариант из группы предложенных. Имя заимствовано у старых радиоприемников с механическими кнопками, которые выскакивали с треском, возвращаясь в прежнее состояние, при нажатии другой кнопки.

GtkWidget* gtk_radio_button_new(GSList *group);

GtkWidget* gtk_radio_button_new_from_widget(GtkRadioButton *group);

GtkWidget* gtk_radio_button_new_with_label(GSList *group, const gchar *label);

void gtk_radio_button_set_group(GtkRadioButton *radio_button, GSList *group);

GSList* gtk_radio_button_get_group(GtkRadioButton *radio_button);

Группа переключателей представлена в объекте-списке библиотеки GLib, названном

GSList
. Для того чтобы объединить переключатели в группу, вы можете создать объект
GSList
и затем передать ему каждую кнопку с помощью функций
gtk_radio_button_new
и
gtk_radio_button_get_group
, есть и более легкий способ в виде функции
gtk_radio_button_new_with_widget
, которая включает в GSList существующую кнопку. Вы увидите ее в действии в упражнении 16.6, которое позволит вам опробовать разные кнопки
GtkButton
.

Упражнение 16.6.
GtkCheckButton
,
GtkToggleButton
и
GtkRadioButton

Введите следующий текст в файл с именем buttons.с.

1. Сначала объявите указатели на кнопки как глобальные переменные:

#include <gtk/gtk.h>

#include <stdio.h>

GtkWidget *togglebutton;

GtkWidget *checkbutton;

GtkWidget *radiobutton1, *radiobutton2;

void closeApp(GtkWidget *window, gpointer data) {

 gtk_main_quit;

}

2. Далее определите вспомогательную функцию, которая упаковывает

GtkWidget
и
GtkLabel
в контейнер
GtkHbox
и затем вставляет этот
GtkHbox
в заданный виджет- контейнер. Это поможет вам сократить повторяющийся программный код:

void add_widget_with_label(GtkContainer * box, gchar * caption,

Поделиться:
Популярные книги

Кодекс Охотника. Книга XXXIV

Винокуров Юрий
34. Кодекс Охотника
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXXIV

Путь Шедара

Кораблев Родион
4. Другая сторона
Фантастика:
боевая фантастика
6.83
рейтинг книги
Путь Шедара

Том 3. Рассказы 1896-1899

Горький Максим
3. Собрание сочинений в тридцати томах
Проза:
русская классическая проза
5.00
рейтинг книги
Том 3. Рассказы 1896-1899

Криптозой

Головачев Василий Васильевич
Фантастика:
научная фантастика
6.25
рейтинг книги
Криптозой

Последний Паладин. Том 12

Саваровский Роман
12. Путь Паладина
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Последний Паладин. Том 12

Страж

Иевлев Геннадий Васильевич
1. Страж
Фантастика:
научная фантастика
6.00
рейтинг книги
Страж

Бродяга. Книга вторая

Первухин Андрей Евгеньевич
2. Бродяга
Фантастика:
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Бродяга. Книга вторая

Изгой Проклятого Клана

Пламенев Владимир
1. Изгой
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Изгой Проклятого Клана

Лекарь Империи 6

Карелин Сергей Витальевич
6. Лекарь Империи
Фантастика:
городское фэнтези
боевая фантастика
аниме
попаданцы
5.00
рейтинг книги
Лекарь Империи 6

Вечная Война. Книга II

Винокуров Юрий
2. Вечная война.
Фантастика:
юмористическая фантастика
космическая фантастика
8.37
рейтинг книги
Вечная Война. Книга II

Товарищ "Чума" 10

lanpirot
10. Товарищ "Чума"
Фантастика:
городское фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Товарищ Чума 10

По прозвищу Святой. Книга первая

Евтушенко Алексей Анатольевич
1. Святой
Фантастика:
попаданцы
альтернативная история
6.40
рейтинг книги
По прозвищу Святой. Книга первая

Железный Воин Империи II

Зот Бакалавр
2. Железный Воин Империи
Фантастика:
фэнтези
попаданцы
аниме
5.75
рейтинг книги
Железный Воин Империи II

Справочник логопеда

Коллектив авторов
Научно-образовательная:
медицина
6.25
рейтинг книги
Справочник логопеда