Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Программирование с использованием gtkmm 3. Виджеты общего назначения

Оригинал: Programming with gtkmm 3
Авторы: Murray Cumming, Bernhard Rieder, Jonathon Jongsma, Ole Laursen, Marko Anastasov, Daniel Elstner, Chris Vine, David King, Pedro Ferreira, Kjell Ahlstedt
Перевод: А.Панин

7.3. Виджет изменения числового значения (SpinButton)

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

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

Виджеты изменения числового значения используют объекты установки диапазонов значений (Adjustment) для хранения информации о диапазонах значений. Атрибуты объекта установки диапазонов значений используются виджетом изменения числового значения следующим образом:
  • value (значение): текущее значение, выбранное виджетом изменения числового значения
  • lower (минимум): минимальное значение диапазона
  • upper (максимум): максимальное значение диапазона
  • step_increment (приращение шага): значение, которое будет прибавляться к текущему числовому значению или вычитаться из него при нажатии на кнопку виджета с помощью первой кнопки мыши
  • page_increment (приращение страницы): значение, которое будет прибавляться к текущему числовому значению или вычитаться из него при нажатии на кнопку виджета с помощью второй кнопки мыши
  • page_size (размер страницы): не используется

Дополнительно третья кнопка мыши может использоваться для непосредственной установки максимального (upper) или минимального (lower) числового значения.

Виджет изменения числового значения может создать стандартный объект установки диапазонов значений, доступ к которому осуществляется с помощью метода get_adjustment() или же вы можете передать существующий объект установки диапазонов значений при использовании конструктора виджета.

7.3.1. Методы

Количество десятичных разрядов может быть изменено с помощью метода set_digits().

Вы можете установить текущее значение виджета изменения числового значения с помощью метода set_value() и получить его с помощью метода get_value().

Метод spin() "прокручивает" значение виджета выбора числового значения таким же образом, как это делается при нажатии на одну из кнопок виджета. Вы должны использовать параметр типа Gtk::SpinType для указания направления изменения значения или нового значения.

Для предотвращения непосредственного ввода пользователем символов, не относящихся к числам, следует передать логическое значение true при вызове метода set_numeric().

Для активации "перевода" значения виджета изменения числовых значений между минимальным и максимальным значением следует использовать метод set_wrap().

Для принудительной привязки числового значения к текущему значению приращения шага (step_increment) следует использовать метод set_snap_to_ticks().

Вы можете изменить политику обновления значения виджета с помощью метода set_upadate_policy(), используя либо значение Gtk::UPDATE_ALWAYS, либо значение Gtk::UPDATE_IF_VALID. Параметр Gtk::UPDATE_ALWAYS позволяет виджету изменения числового значения игнорировать ошибки, которые произошли в процессе преобразования текста из поля ввода в числовое значение. Таким образом, эта установка позволяет использовать не относящиеся к числовым значения при работе с виджетом изменения числового значения. Вы можете провести принудительное немедленное обновление значения виджета с помощью метода update().

Справочная информация

7.3.2. Пример

Ниже приведен пример работы с виджетом изменения числового значения:

Рисунок 7-6: Виджет изменения числового значения
Виджет изменения числового значения

Исходный код

Файл examplewindow.h (Для использования совместно с gtkmm 3, а не с gtkmm 2)

Файл examplewindow.cc (Для использования совместно с gtkmm 3, а не с gtkmm 2)

Файл main.cc (Для использования совместно с gtkmm 3, а не с gtkmm 2)

7.4. Индикатор выполнения задачи (ProgressBar)

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

Для изменения демонстрируемого значения следует использовать метод set_fraction() с передачей значения с плавающей точкой в диапазоне от 0 до 1, являющегося текущей степенью выполнения операции в процентах.

Степень выполнения в процентах является числом в диапазоне от 0 до 1 и указывает на то, насколько велика часть виджета, которая должна быть выделена.

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

Справочная информация

7.4.1. Режим активности

Помимо демонстрации степени выполнения задачи, индикатор выполнения задачи также может использоваться для демонстрации того, что приложение активно; для этого индикатор выполнения задачи переводится в режим активности (activity mode). В этом режиме индикатор выполнения задачи выводит небольшой прямоугольник, который движется из стороны в сторону. Режим активности наиболее полезен в ситуациях, когда степень выполнения операции не может быть точно рассчитана и представлена в виде значения из диапазона значений (например, при приеме файла неизвестного размера).

При работе в описанном режиме вы должны вызывать метод pulse() через равные промежутки времени. Вы также можете выбрать размер шага с помощью метода set_pulse_step().

В процессе работы индикатор выполнения задачи может выводить произвольный текст на переднем плане, причем этот текст может задаваться с помощью метода set_text().

7.4.2. Пример

Рисунок 7-7: Индикатор выполнения задачи (ProgressBar)
Индикатор выполнения задачи (ProgressBar)

Исходный код

Файл examplewindow.h (Для использования совместно с gtkmm 3, а не с gtkmm 2)

Файл examplewindow.cc (Для использования совместно с gtkmm 3, а не с gtkmm 2)

Файл main.cc (Для использования совместно с gtkmm 3, а не с gtkmm 2)

7.5. Информационная панель (InfoBar)

Информационная панель позволяет демонстрировать небольшие информационные сообщения или задавать краткие вопросы. В отличие от диалоговых окон, она показывается вверху текущего окна, а не в новом открытом окне. API соответствующего класса очень схож с API класса Gtk::Dialog.

Справочная информация

7.5.1. Пример

Рисунок 7-8: Информационная панель
Информационная панель (InfoBar)

Исходный код

Файл examplewindow.h (Для использования совместно с gtkmm 3, а не с gtkmm 2)

Файл examplewindow.cc (Для использования совместно с gtkmm 3, а не с gtkmm 2)

Файл main.cc (Для использования совместно с gtkmm 3, а не с gtkmm 2)

7.6. Всплывающие подсказки (Tooltips)

Всплывающие подсказки являются небольшими информационными окнами, которые показываются в момент, когда вы оставляете на несколько секунд курсор мыши над виджетом. Следует использовать метод set_tooltip_text() для установки текста всплывающей подсказки для любого виджета. Класс Gtk::ToolItem не представляет виджеты, но имеет такой же метод для удобства использования. Класс Gtk::Tooltip используется для вывода более сложных данных, таких, как изображения с текстом.

Справочная информация для класса Gtk::Widget

Справочная информация для класса Gtk::Tooltip

7.6.1. Пример

Рисунок 7-9: Всплывающая подсказка (Tooltip)
Всплывающая подсказка (Tooltip)

Исходный код

Файл examplewindow.h (Для использования совместно с gtkmm 3, а не с gtkmm 2)

Файл examplewindow.cc (Для использования совместно с gtkmm 3, а не с gtkmm 2)

Файл main.cc (Для использования совместно с gtkmm 3, а не с gtkmm 2)


Следующий раздел : 8. Контейнерные виджеты.