Книга: Основы программирования в Linux

GtkSpinButton

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",
  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 

Оглавление книги

Оглавление статьи/книги

Генерация: 2.681. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз