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

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

Жанры

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

 gtk_container_add(GTK_CONTAINER(window), vbox);

 gtk_widget_show_all(window);

 gtk_main;

 return 0;

}

Когда вы запустите программу, то получите окно, показанное на рис. 16.8.

Рис. 16.8 

Как это работает

Программа создает два виджета типа

GtkEntry
,
username_entry
и
password_entry
, а также задает видимость
password_entry
, равной
FALSE
, чтобы скрыть введенный пароль. Затем она формирует кнопку
GtkButton
, с помощью которой вы связываете сигнал
clicked
с функцией обратного вызова
button_clicked
.

Как только в функции обратного вызова программа извлечет введенный пароль и сравнит его с секретным паролем, на экран выводится соответствующее сообщение.

Обратите внимание на то, что для вставки виджетов в свои контейнеры вы много раз повторили операторы

gtk_box_pack_start
. Для сокращения этого повторяющегося программного кода в последующих примерах будет определена вспомогательная функция.

GtkSpinButton

Порой вам нужно, чтобы пользователь ввел числовое значение, например, максимальную скорость или размер инструмента, и в такой ситуации виджет

GtkSpinButton
(кнопка-счетчик) идеален. Он ограничивает ввод пользователя только цифровыми символами и можно задать диапазон допустимых значений от нижней до верхней границы. Виджет также содержит стрелки, направленные вверх и вниз, так что пользователь может "накручивать" значение, для удобства пользуясь только мышью.

GtkWidget

 +---- GtkEntry

+---- GtkSpinButton

И снова API понятен, и мы перечислим наиболее часто применяемые вызовы:

GtkWidget* gtk_spin_button_new(GtkAdjustment *adjustment,

 gdouble climb_rate, guint digits);

GtkWidget* gtk_spin_button_new_with_range(gdouble min, gdouble max,

 gdouble step);

void gtk_spin_button_set_digits(GtkSpinButton *spin_button, guint digits);

void gtk_spin_button_set_increments(GtkSpinButton *spin_button,

 gdouble step, gdouble page);

void gtk_spin_button_set_range(GtkSpinButton *spin_button, gdouble min,

 gdouble max);

gdouble gtk_spin_button_get_value(GtkSpinButton *spin_button);

gint gtk_spin_button_get_value_as_int(GtkSpinButton *spin_button);

void gtk_spin_button_set_value(GtkSpinButton *spin button, gdouble value);

Для создания виджета

GtkSpinButton
с помощью функции
gtk_spin_button_new
вы сначала должны создать объект
GtkAdjustment
. Виджет
GtkAdjustment
— это абстрактный объект, содержащий логику, касающуюся управления значениями с ограничениями. Он также применяется и в других виджетах, таких как
GtkHScale
и
GtkVScale
.

Для создания объекта типа

GtkAdjustment
передайте в функцию нижнюю и верхнюю границы и размер приращения.

GtkObject* gtk_adjustment_new(gdouble value, gdouble lower,

 gdouble upper, gdouble step_increment,

 gdouble page_increment, gdouble page_size);

Значения параметров

step_increment
и
page_increment
задают величину минимального и максимального приращений, В случае кнопки-счетчика
GtkSpinButton
параметр
step_increment
определяет, насколько изменится значение при щелчке мышью стрелки виджета. Параметры
page_increment
и
page_size
в виджетах
GtkSpinButton
не важны.

Второй параметр,

climb_rate
, функции
gtk_spin_button_new
управляет скоростью прокрутки значений при нажатии и удерживании кнопки со стрелкой. И наконец, параметр
digits
задает точность представления числового значения, виджета, если, например,
digits
равен 3, кнопка-счетчик отобразит 0.00.

Функция

gtk_spin_button_new_with_range
— удобный способ создания объекта
GtkAdjustment
. Просто задайте нижнюю и верхнюю границы и величину приращения.

Прочесть текущее значение очень легко благодаря функции

gtk_spin_button_getvalue
, а если вам нужно целое число, можно применить функцию
gtk_spin_button_get_value_as_int
.

Выполните упражнение 16.5.

Упражнение 16.5. Использование виджета
GtkSpinButton

Сейчас мы посмотрим в коротком примере, как действует кнопка-счетчик GtkSpinButton. Назовите файл spin.с.

#include <gtk/gtk.h>

void closeApp(GtkWidget *window, gpointer data) {

 gtk_main_quit;

}

int main(int argc, char *argv[]) {

 GtkWidget* window;

 GtkWidget *spinbutton;

 GtkObject *adjustment;

 gtk_init(&argc, &argv);

 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

 gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);

 g_signal_connect(GTK_OBJECT(window), "destroy",

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

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

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

Черный дембель. Часть 5

Федин Андрей Анатольевич
5. Черный дембель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Черный дембель. Часть 5

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

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

Мечников. Клятва лекаря

Алмазов Игорь
2. Жизнь Лекаря с нуля
Фантастика:
альтернативная история
аниме
фэнтези
попаданцы
6.60
рейтинг книги
Мечников. Клятва лекаря

Гримуар темного лорда IV

Грехов Тимофей
4. Гримуар темного лорда
Фантастика:
фэнтези
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Гримуар темного лорда IV

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

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

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

Сапфир Олег
16. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 16

Чехов

Гоблин (MeXXanik)
1. Адвокат Чехов
Фантастика:
фэнтези
боевая фантастика
альтернативная история
5.00
рейтинг книги
Чехов

Вперед в прошлое 12

Ратманов Денис
12. Вперед в прошлое
Фантастика:
попаданцы
5.00
рейтинг книги
Вперед в прошлое 12

Компас желаний

Кас Маркус
8. Артефактор
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Компас желаний

Держать удар

Иванов Дмитрий
11. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Держать удар

Точка Бифуркации X

Смит Дейлор
10. ТБ
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Точка Бифуркации X

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

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

Дважды одаренный. Том VI

Тарс Элиан
6. Дважды одаренный
Фантастика:
аниме
альтернативная история
фэнтези
фантастика: прочее
5.00
рейтинг книги
Дважды одаренный. Том VI