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

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

Жанры

Основы программирования в 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,

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

Бастард Императора

Орлов Андрей Юрьевич
1. Бастард Императора
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Бастард Императора

Офицер

Земляной Андрей Борисович
1. Офицер
Фантастика:
боевая фантастика
7.21
рейтинг книги
Офицер

Неудержимый. Книга XII

Боярский Андрей
12. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XII

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

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

Огненный наследник

Тарс Элиан
10. Десять Принцев Российской Империи
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Огненный наследник

Идеальный мир для Лекаря 11

Сапфир Олег
11. Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 11

Газлайтер. Том 12

Володин Григорий Григорьевич
12. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 12

Убивать, чтобы жить

Бор Жорж
1. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать, чтобы жить

На границе империй. Том 10. Часть 1

INDIGO
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 1

На обочине 40 плюс. Кляча не для принца

Трофимова Любовь
Проза:
современная проза
5.00
рейтинг книги
На обочине 40 плюс. Кляча не для принца

Зодчий. Книга II

Погуляй Юрий Александрович
2. Зодчий Империи
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Зодчий. Книга II

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

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

Бастард Императора. Том 9

Орлов Андрей Юрьевич
9. Бастард Императора
Фантастика:
городское фэнтези
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Бастард Императора. Том 9

Неудержимый. Книга XX

Боярский Андрей
20. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XX