Цель лекции: Научиться использовать класс
К элементам управления для установки значений относятся ползунок, установщик (регулятор) и полоса прокрутки. Эта группа виджетов предназначена для задания каких-либо численных параметров программы, не требующих большой точности, например, уровень громкости звука в медиаплейере.
Для создания первых двух виджетов в Juce используется один класс — ).
(рис 13.1) Различные стили объектов класса Slider в демонстрационном приложении Juce
Конструктор класса создаёт ползунок, пользовательский интерфейс (стиль, а также границы и шаг устанавливаемых значений) которого должны быть обязательно заданы программистом.
Стиль объекта класса SlyderStyle:
LinearHorizontal — традиционный горизонтальный ползунок;LinearVertical — традиционный вертикальный ползунок; LinearBar — полоса с заливкой, которую можно протягивать мышью, и надписью поверх неё;Rotary — установщик (круговой регулятор), похожий на регулятор громкости радиоприёмника, головку которого можно перемещать с помощью мыши;RotaryHorizontalDrag — установщик (круговой регулятор), похожий на регулятор громкости радиоприёмника, головку которого можно перемещать с помощью мыши слева направо;RotaryVerticalDrag — установщик (круговой регулятор), похожий на регулятор громкости радиоприёмника, головку которого можно перемещать с помощью мыши вверх и вниз;IncDecButtons — пара кнопок, нажатие на которые инкрементируют / декрементируют текущее значение ползунка на величину, заданную параметром newInterval метода void TwoValueHorizontal — горизонтальный ползунок с двумя головками вместо одной, которые могут показывать минимальное и максимальное значения параметра;TwoValueVertical — вертикальный ползунок с двумя головками вместо одной, которые могут показывать минимальное и максимальное значения параметра; ThreeValueHorizontal — горизонтальный ползунок с тремя головками вместо одной, которые могут показывать минимальное и максимальное значения параметра, а также текущее, находящееся где-то между ними;Для того, чтобы присвоить ползунку тот или иной стиль, необходимо передать идентификатор SlyderStyle в качестве параметра в метод void
Для установки границ и шага изменения значения ползунка используется уже упоминавшийся метод void , где newMinimum, newMaximum и newInterval — минимальное, максимальное значения и шаг, соответственно. Если параметр newInterval не равен нулю, то приращение его значения будет вычисляться как newMinimum + (newInterval * i), где i — приращение.
Установить текущее значение ползунка можно с помощью метода void , где newValue — устанавливаемое значение, а sendUpdateMessage и sendMessageSynchronously — флаги того, следует ли отправлять сообщения слушателям ползунка об изменении его значения и следует ли осуществлять их вызов синхронно (в случае, если слушателей несколько).
Для получения текущего значения ползунка можно вызвать метод double . Если он не был вызван, то начальное значение ползунка будет установлено на ноль.
Отслеживать изменения позволяет слушатель ползунка, SliderListener, включающий одну чистую виртуальную функцию, virtual void , которая должна быть переопределена.
Рассмотрим это на примере. Приложение, представленное на рисунке 13.2 , содержит ползунок pSlider и полосу выполнения pProgressBar, состояние которой зависит от текущего значения ползунка.
(рис 13.2) Приложение, демонстрирующее работу ползунка
Кроме того, компонент содержимого нашей программы включает выпадающий список для выбора пользователем стиля ползунка и 4 радиокнопки для выбора местоположения поля ввода, отображающего текущее значение ползунка .
#ifndef _TCentralComponent_h_
#define _TCentralComponent_h_
//---------------------------------------
#include "../JuceLibraryCode/JuceHeader.h"
//---------------------------------------
// Класс компонента содержимого, наследует слушатели ползунка,
// выпадающего списка и кнопки.
class TCentralComponent : public Component,
public SliderListener,
public ComboBoxListener,
public ButtonListener
{
public:
TCentralComponent();
~TCentralComponent();
void paint(Graphics);
void resized();
// Обработчик изменения позиции ползунка
void sliderValueChanged(Slider*);
void comboBoxChanged(ComboBox*);
void buttonClicked(Button*);
private:
// Выполнение...
double dProgress;
// Полоса выполнения
ProgressBar* pProgressBar;
// Ползунок
Slider* pSlider;
Label* pStyleLabel;
// Выадающий сисок со значениями стиля ползунка
ComboBox* pStyleComboBox;
GroupComponent* pTextGroup;
// Радиокнопки для выбора положения
// поля ввода ползунка
ToggleButton* pAboveRadioButton;
ToggleButton* pBelowRadioButton;
ToggleButton* pLeftRadioButton;
ToggleButton* pRightRadioButton;
// Предотвращает создание копии конструктора и оператора =
TCentralComponent(const TCentralComponent);
const TCentralComponent operator= (const TCentralComponent);
};
//--------------------------------------------
#endif
В качестве закрытого члена класса TCentralComponent мы объявили переменную double dProgress. Именно на её изменение и будет отображать полоса выполнения pProgressBar.
Рассмотрим реализацию конструктора компонента содержимого нашего приложения .
#include "TCentralComponent.h"
//--------------------------------
#define tr(s) String::fromUTF8(s)
//------------------------------
TCentralComponent::TCentralComponent() : Component ("Central Component"),
pProgressBar(0), pSlider(0),
pStyleLabel(0),
pStyleComboBox(0),
pTextGroup(0),
pAboveRadioButton(0),
pBelowRadioButton(0),
pLeftRadioButton(0),
pRightRadioButton(0)
{
// Ползунок ещё не двигали - выполнение ноль
dProgress = 0.0;
// Создаём полосу выполнения, которая будет отображать
// изменение переменной dProgress
pProgressBar = new ProgressBar(dProgress);
// Отображать процент выполнения в виде текста
pProgressBar->setPercentageDisplay(true);
addAndMakeVisible(pProgressBar);
// Создаём ползунок
pSlider = new Slider(L"Slider");
// Границы значений - от 0 до 100,
// шаг - 0,1.
pSlider->setRange(0, 100, 0.1);
// Стиль - обычный горизонтальный ползунок
pSlider->setSliderStyle(Slider::LinearHorizontal);
// Текстовое поле ползунка расположено внизу, доступно для ввода значений,
// размеры - 80 на 20.
pSlider->setTextBoxStyle(Slider::TextBoxBelow, false, 80, 20);
pSlider->addListener(this);
addAndMakeVisible(pSlider);
pStyleLabel = new Label (L"Style Label", tr("Стиль:"));
pStyleLabel->setFont(Font(15.0000f, Font::plain));
pStyleLabel->setJustificationType(Justification::centredLeft);
pStyleLabel->setEditable(false, false, false);
pStyleLabel->setColour(Label::textColourId, Colours::black);
pStyleLabel->setColour(Label::backgroundColourId, Colours::azure);
addAndMakeVisible(pStyleLabel);
// Выпадающий список со значениями стилей ползунка
pStyleComboBox = new ComboBox(L"Style Combo Box");
pStyleComboBox->setEditableText(false);
pStyleComboBox->setJustificationType(Justification::centredLeft);
pStyleComboBox->setTextWhenNothingSelected(String::empty);
pStyleComboBox->addListener(this);
addAndMakeVisible(pStyleComboBox);
// Добавляем стили...
pStyleComboBox->addItem(L"LinearHorizontal", 1);
pStyleComboBox->addItem(L"LinearVertical", 2);
pStyleComboBox->addItem(L"LinearBar", 3);
pStyleComboBox->addItem(L"Rotary", 4);
pStyleComboBox->addItem(L"IncDecButtons", 5);
// Выбран первый элемент списка
pStyleComboBox->setSelectedItemIndex(0, false);
pTextGroup = new GroupComponent (L"Text Group", tr("Положение текста"));
addAndMakeVisible(pTextGroup);
// Радиокнопки для выбора положения текстового поля ползунка
pAboveRadioButton = new ToggleButton(L"Above RadioButton");
pAboveRadioButton->setButtonText(tr("Сверху"));
pAboveRadioButton->setRadioGroupId(1234);
pAboveRadioButton->addListener(this);
addAndMakeVisible(pAboveRadioButton);
pBelowRadioButton = new ToggleButton(L"Below RadioButton");
pBelowRadioButton->setButtonText(tr("Снизу"));
pBelowRadioButton->setRadioGroupId(1234);
pBelowRadioButton->setToggleState(true, true);
pBelowRadioButton->addListener(this);
addAndMakeVisible(pBelowRadioButton);
pLeftRadioButton = new ToggleButton(L"Left RadioButton");
pLeftRadioButton->setButtonText(tr("Слева"));
pLeftRadioButton->setRadioGroupId(1234);
pLeftRadioButton->addListener(this);
addAndMakeVisible(pLeftRadioButton);
pRightRadioButton = new ToggleButton(L"Right RadioButton");
pRightRadioButton->setButtonText(tr("Справа"));
pRightRadioButton->setRadioGroupId(1234);
pRightRadioButton->addListener(this);
addAndMakeVisible(pRightRadioButton);
setSize(400, 400);
}
//----------------------------------------
Конструктор полосы выполнения ProgressBar::ProgressBar(double progress) в качестве параметра принимает переменную, изменения которой отслеживаются в ходе выполнения программы. Если переменной присваивается новое значение, то полоса выполнения автоматически перерисовывает сама себя для его отображения. Обратите внимание, что диапазон значений, принимаемых переменной должен находиться в пределах от 0 до 1. В качестве параметра конструктора создаваемой полосы выполнения мы передаём упоминавшуюся переменную dProgress, которую предварительно инициализируем нулём.
Полоса состояния может отображать или не отображать процент выполнения той или иной операции (фактически — прироста или убыли значения переменной — параметра конструктора). Для того, чтобы задать отображение процента выполнения в виде числа, рисуемого на поверхности полосы выполнения, мы вызываем метод void ProgressBar::setPercentageDisplay(bool shouldDisplayPercentage), где shouldDisplayPercentage — флаг включения / отключения отображения процента выполнения в виде числа.
Затем мы создаём ползунок, которому задаём начальные параметры: горизонтальный стиль, диапазон от
Как уже упоминалось, каждому ползунку может быть ассоциировано текстовое поле, отображающее его текущее значение. Задать параметры отображения этого поля можно с помощью метода void , где newPosition — положение поля относительно ползунка, isReadOnly — флаг того, может ли пользователь вводить в поле новое текущее значение ползунка, а textEntryBoxWidth и textEntryBoxHeight — его размеры.
Позиция поля ввода ползунка задаётся идентификаторами TextEntryBoxPosition:
NoTextBox — поле отсутствует; TextBoxLeft — расположено слева от ползунка; TextBoxRight — расположено справа от ползунка; TextBoxAbove — расположено сверху от ползунка; TextBoxBelow — расположено снизу от ползунка.Мы сделали поле ввода нашего ползунка доступным для чтения и расположили его внизу от ползунка.
Пользователь может на этапе выполнения менять его стиль, выбирая его в выпадающем списке , рис 13.2).
void TCentralComponent::comboBoxChanged(ComboBox* pBox)
{
// Устанавливаем для ползунка стиль, выбранный
// пользователем в выпадающем списке
switch(pBox->getSelectedItemIndex())
{
case 0:
{
pSlider->setSliderStyle(Slider::LinearHorizontal);
break;
}
case 1:
{
pSlider->setSliderStyle(Slider::LinearVertical);
break;
}
case 2:
{
pSlider->setSliderStyle(Slider::LinearBar);
break;
}
case 3:
{
pSlider->setSliderStyle(Slider::Rotary);
break;
}
case 4:
{
pSlider->setSliderStyle(Slider::IncDecButtons);
break;
}
default:
{
pSlider->setSliderStyle(Slider::LinearHorizontal);
}
}
}
//---------------------------------------------------------------------
void TCentralComponent::buttonClicked(Button* pButton)
{
// Устанавливаем для текстового поля ползунка позицию,
// отмеченную пользователем
if(pButton == pAboveRadioButton)
{
pSlider->setTextBoxStyle(Slider::TextBoxAbove , false, 80, 20);
}
else if(pButton == pBelowRadioButton)
{
pSlider->setTextBoxStyle(Slider::TextBoxBelow, false, 80, 20);
}
else if(pButton == pLeftRadioButton)
{
pSlider->setTextBoxStyle(Slider::TextBoxLeft, false, 80, 20);
}
else if(pButton == pRightRadioButton)
{
pSlider->setTextBoxStyle(Slider::TextBoxRight, false, 80, 20);
}
}
Логика работы программы представлена реализацией метода .
void TCentralComponent::sliderValueChanged(Slider* pSlider)
{
// Если пользователь двигает ползунок,
// отображаем это в виде изменения
// полосы выполнения
dProgress = (pSlider->getValue()) / 100.0;
}
При изменении пользователем положения ползунка, что и приводит к вызову метода, мы присваиваем переменной dProgress новое значение, что и приводит к изменению полосы выполнения. Поскольку значения отслеживаемой ею переменной должны колебаться в пределах от 0 до 1, мы делим текущее значение ползунка на 100.
Класс ScrollBar отвечает за создание полосы прокрутки — важной составляющей пользовательского интерфейса. С её помощью отображаются текстовые или графические данные, превышающие отведённую для них область просмотра. Используя указатель текущего положения полосы прокрутки, можно перемещать данные в видимую область.
Отдельно полосы прокрутки используются очень редко. Удобнее создать объект класса Viewport (область просмотра) и подключить к нему дочерний компонент, положение которого относительно области просмотра необходимо изменять, методом void Viewport::setViewedComponent(Component* newViewedComponent). Кроме того, многие компоненты (например, TextEditor) включают уже готовые полосы прокрутки, по умолчанию появляющиеся, когда содержимое компонента выходит за пределы области просмотра.
Основными свойствами ScrollBar являются положение (вертикальное или горизонтальное), а также диапазон значений.
Положение полосы прокрутки задаётся методом void ScrollBar::setOrientation(bool shouldBeVertical). В случае, если параметр функции принимает значение true, то направление полосы прокрутки будет вертикальным; в противном случае — горизонтальным.
Узнать текущее положение полосы прокрутки позволяет метод bool ScrollBar::isVertical() const throw ().
Задать диапазон значений, на которые может быть смещена головка полосы прокрутки позволяет метод void ScrollBar::setRangeLimits(double minimum, double maximum), где принимаемые параметры — минимальное и максимальное значения смещения, соответственно. Получить минимальное и максимальное значение текущего диапазона позволяют методы double ScrollBar::getMinimumRangeLimit() const throw() и double ScrollBar::getMaximumRangeLimit() const throw().
Задать новое положение головки полосы прокрутки можно с помощью метода void ScrollBar::setCurrentRangeStart(double newStart).
В этой лекции мы научились создавать и использовать в своих программах различного рода ползунки с помощью одного класса, . Внешний вид ползунка устанавливается идентификаторами SlyderStyle.
Создайте платформ-независимый проект с помощью Introjucer на основе листингов лекции. Соберите программу, включающую окно с изменяемыми размерами для
Вашей среды разработки. Поэкспериментируйте с внешним видом окна.
Архив с исходными текстами примера Вы можете скачать здесь.
Цель лекции: Научиться использовать класс
К элементам управления для установки значений относятся ползунок, установщик (регулятор) и полоса прокрутки. Эта группа виджетов предназначена для задания каких-либо численных параметров программы, не требующих большой точности, например, уровень громкости звука в медиаплейере.
Для создания первых двух виджетов в Juce используется один класс — ).
(рис 13.1) Различные стили объектов класса Slider в демонстрационном приложении Juce
Конструктор класса создаёт ползунок, пользовательский интерфейс (стиль, а также границы и шаг устанавливаемых значений) которого должны быть обязательно заданы программистом.
Стиль объекта класса SlyderStyle:
LinearHorizontal — традиционный горизонтальный ползунок;LinearVertical — традиционный вертикальный ползунок; LinearBar — полоса с заливкой, которую можно протягивать мышью, и надписью поверх неё;Rotary — установщик (круговой регулятор), похожий на регулятор громкости радиоприёмника, головку которого можно перемещать с помощью мыши;RotaryHorizontalDrag — установщик (круговой регулятор), похожий на регулятор громкости радиоприёмника, головку которого можно перемещать с помощью мыши слева направо;RotaryVerticalDrag — установщик (круговой регулятор), похожий на регулятор громкости радиоприёмника, головку которого можно перемещать с помощью мыши вверх и вниз;IncDecButtons — пара кнопок, нажатие на которые инкрементируют / декрементируют текущее значение ползунка на величину, заданную параметром newInterval метода void TwoValueHorizontal — горизонтальный ползунок с двумя головками вместо одной, которые могут показывать минимальное и максимальное значения параметра;TwoValueVertical — вертикальный ползунок с двумя головками вместо одной, которые могут показывать минимальное и максимальное значения параметра; ThreeValueHorizontal — горизонтальный ползунок с тремя головками вместо одной, которые могут показывать минимальное и максимальное значения параметра, а также текущее, находящееся где-то между ними;Для того, чтобы присвоить ползунку тот или иной стиль, необходимо передать идентификатор SlyderStyle в качестве параметра в метод void
Для установки границ и шага изменения значения ползунка используется уже упоминавшийся метод void , где newMinimum, newMaximum и newInterval — минимальное, максимальное значения и шаг, соответственно. Если параметр newInterval не равен нулю, то приращение его значения будет вычисляться как newMinimum + (newInterval * i), где i — приращение.
Установить текущее значение ползунка можно с помощью метода void , где newValue — устанавливаемое значение, а sendUpdateMessage и sendMessageSynchronously — флаги того, следует ли отправлять сообщения слушателям ползунка об изменении его значения и следует ли осуществлять их вызов синхронно (в случае, если слушателей несколько).
Для получения текущего значения ползунка можно вызвать метод double . Если он не был вызван, то начальное значение ползунка будет установлено на ноль.
Отслеживать изменения позволяет слушатель ползунка, SliderListener, включающий одну чистую виртуальную функцию, virtual void , которая должна быть переопределена.
Рассмотрим это на примере. Приложение, представленное на рисунке 13.2 , содержит ползунок pSlider и полосу выполнения pProgressBar, состояние которой зависит от текущего значения ползунка.
(рис 13.2) Приложение, демонстрирующее работу ползунка
Кроме того, компонент содержимого нашей программы включает выпадающий список для выбора пользователем стиля ползунка и 4 радиокнопки для выбора местоположения поля ввода, отображающего текущее значение ползунка .
#ifndef _TCentralComponent_h_
#define _TCentralComponent_h_
//---------------------------------------
#include "../JuceLibraryCode/JuceHeader.h"
//---------------------------------------
// Класс компонента содержимого, наследует слушатели ползунка,
// выпадающего списка и кнопки.
class TCentralComponent : public Component,
public SliderListener,
public ComboBoxListener,
public ButtonListener
{
public:
TCentralComponent();
~TCentralComponent();
void paint(Graphics);
void resized();
// Обработчик изменения позиции ползунка
void sliderValueChanged(Slider*);
void comboBoxChanged(ComboBox*);
void buttonClicked(Button*);
private:
// Выполнение...
double dProgress;
// Полоса выполнения
ProgressBar* pProgressBar;
// Ползунок
Slider* pSlider;
Label* pStyleLabel;
// Выадающий сисок со значениями стиля ползунка
ComboBox* pStyleComboBox;
GroupComponent* pTextGroup;
// Радиокнопки для выбора положения
// поля ввода ползунка
ToggleButton* pAboveRadioButton;
ToggleButton* pBelowRadioButton;
ToggleButton* pLeftRadioButton;
ToggleButton* pRightRadioButton;
// Предотвращает создание копии конструктора и оператора =
TCentralComponent(const TCentralComponent);
const TCentralComponent operator= (const TCentralComponent);
};
//--------------------------------------------
#endif
В качестве закрытого члена класса TCentralComponent мы объявили переменную double dProgress. Именно на её изменение и будет отображать полоса выполнения pProgressBar.
Рассмотрим реализацию конструктора компонента содержимого нашего приложения .
#include "TCentralComponent.h"
//--------------------------------
#define tr(s) String::fromUTF8(s)
//------------------------------
TCentralComponent::TCentralComponent() : Component ("Central Component"),
pProgressBar(0), pSlider(0),
pStyleLabel(0),
pStyleComboBox(0),
pTextGroup(0),
pAboveRadioButton(0),
pBelowRadioButton(0),
pLeftRadioButton(0),
pRightRadioButton(0)
{
// Ползунок ещё не двигали - выполнение ноль
dProgress = 0.0;
// Создаём полосу выполнения, которая будет отображать
// изменение переменной dProgress
pProgressBar = new ProgressBar(dProgress);
// Отображать процент выполнения в виде текста
pProgressBar->setPercentageDisplay(true);
addAndMakeVisible(pProgressBar);
// Создаём ползунок
pSlider = new Slider(L"Slider");
// Границы значений - от 0 до 100,
// шаг - 0,1.
pSlider->setRange(0, 100, 0.1);
// Стиль - обычный горизонтальный ползунок
pSlider->setSliderStyle(Slider::LinearHorizontal);
// Текстовое поле ползунка расположено внизу, доступно для ввода значений,
// размеры - 80 на 20.
pSlider->setTextBoxStyle(Slider::TextBoxBelow, false, 80, 20);
pSlider->addListener(this);
addAndMakeVisible(pSlider);
pStyleLabel = new Label (L"Style Label", tr("Стиль:"));
pStyleLabel->setFont(Font(15.0000f, Font::plain));
pStyleLabel->setJustificationType(Justification::centredLeft);
pStyleLabel->setEditable(false, false, false);
pStyleLabel->setColour(Label::textColourId, Colours::black);
pStyleLabel->setColour(Label::backgroundColourId, Colours::azure);
addAndMakeVisible(pStyleLabel);
// Выпадающий список со значениями стилей ползунка
pStyleComboBox = new ComboBox(L"Style Combo Box");
pStyleComboBox->setEditableText(false);
pStyleComboBox->setJustificationType(Justification::centredLeft);
pStyleComboBox->setTextWhenNothingSelected(String::empty);
pStyleComboBox->addListener(this);
addAndMakeVisible(pStyleComboBox);
// Добавляем стили...
pStyleComboBox->addItem(L"LinearHorizontal", 1);
pStyleComboBox->addItem(L"LinearVertical", 2);
pStyleComboBox->addItem(L"LinearBar", 3);
pStyleComboBox->addItem(L"Rotary", 4);
pStyleComboBox->addItem(L"IncDecButtons", 5);
// Выбран первый элемент списка
pStyleComboBox->setSelectedItemIndex(0, false);
pTextGroup = new GroupComponent (L"Text Group", tr("Положение текста"));
addAndMakeVisible(pTextGroup);
// Радиокнопки для выбора положения текстового поля ползунка
pAboveRadioButton = new ToggleButton(L"Above RadioButton");
pAboveRadioButton->setButtonText(tr("Сверху"));
pAboveRadioButton->setRadioGroupId(1234);
pAboveRadioButton->addListener(this);
addAndMakeVisible(pAboveRadioButton);
pBelowRadioButton = new ToggleButton(L"Below RadioButton");
pBelowRadioButton->setButtonText(tr("Снизу"));
pBelowRadioButton->setRadioGroupId(1234);
pBelowRadioButton->setToggleState(true, true);
pBelowRadioButton->addListener(this);
addAndMakeVisible(pBelowRadioButton);
pLeftRadioButton = new ToggleButton(L"Left RadioButton");
pLeftRadioButton->setButtonText(tr("Слева"));
pLeftRadioButton->setRadioGroupId(1234);
pLeftRadioButton->addListener(this);
addAndMakeVisible(pLeftRadioButton);
pRightRadioButton = new ToggleButton(L"Right RadioButton");
pRightRadioButton->setButtonText(tr("Справа"));
pRightRadioButton->setRadioGroupId(1234);
pRightRadioButton->addListener(this);
addAndMakeVisible(pRightRadioButton);
setSize(400, 400);
}
//----------------------------------------
Конструктор полосы выполнения ProgressBar::ProgressBar(double progress) в качестве параметра принимает переменную, изменения которой отслеживаются в ходе выполнения программы. Если переменной присваивается новое значение, то полоса выполнения автоматически перерисовывает сама себя для его отображения. Обратите внимание, что диапазон значений, принимаемых переменной должен находиться в пределах от 0 до 1. В качестве параметра конструктора создаваемой полосы выполнения мы передаём упоминавшуюся переменную dProgress, которую предварительно инициализируем нулём.
Полоса состояния может отображать или не отображать процент выполнения той или иной операции (фактически — прироста или убыли значения переменной — параметра конструктора). Для того, чтобы задать отображение процента выполнения в виде числа, рисуемого на поверхности полосы выполнения, мы вызываем метод void ProgressBar::setPercentageDisplay(bool shouldDisplayPercentage), где shouldDisplayPercentage — флаг включения / отключения отображения процента выполнения в виде числа.
Затем мы создаём ползунок, которому задаём начальные параметры: горизонтальный стиль, диапазон от
Как уже упоминалось, каждому ползунку может быть ассоциировано текстовое поле, отображающее его текущее значение. Задать параметры отображения этого поля можно с помощью метода void , где newPosition — положение поля относительно ползунка, isReadOnly — флаг того, может ли пользователь вводить в поле новое текущее значение ползунка, а textEntryBoxWidth и textEntryBoxHeight — его размеры.
Позиция поля ввода ползунка задаётся идентификаторами TextEntryBoxPosition:
NoTextBox — поле отсутствует; TextBoxLeft — расположено слева от ползунка; TextBoxRight — расположено справа от ползунка; TextBoxAbove — расположено сверху от ползунка; TextBoxBelow — расположено снизу от ползунка.Мы сделали поле ввода нашего ползунка доступным для чтения и расположили его внизу от ползунка.
Пользователь может на этапе выполнения менять его стиль, выбирая его в выпадающем списке , рис 13.2).
void TCentralComponent::comboBoxChanged(ComboBox* pBox)
{
// Устанавливаем для ползунка стиль, выбранный
// пользователем в выпадающем списке
switch(pBox->getSelectedItemIndex())
{
case 0:
{
pSlider->setSliderStyle(Slider::LinearHorizontal);
break;
}
case 1:
{
pSlider->setSliderStyle(Slider::LinearVertical);
break;
}
case 2:
{
pSlider->setSliderStyle(Slider::LinearBar);
break;
}
case 3:
{
pSlider->setSliderStyle(Slider::Rotary);
break;
}
case 4:
{
pSlider->setSliderStyle(Slider::IncDecButtons);
break;
}
default:
{
pSlider->setSliderStyle(Slider::LinearHorizontal);
}
}
}
//---------------------------------------------------------------------
void TCentralComponent::buttonClicked(Button* pButton)
{
// Устанавливаем для текстового поля ползунка позицию,
// отмеченную пользователем
if(pButton == pAboveRadioButton)
{
pSlider->setTextBoxStyle(Slider::TextBoxAbove , false, 80, 20);
}
else if(pButton == pBelowRadioButton)
{
pSlider->setTextBoxStyle(Slider::TextBoxBelow, false, 80, 20);
}
else if(pButton == pLeftRadioButton)
{
pSlider->setTextBoxStyle(Slider::TextBoxLeft, false, 80, 20);
}
else if(pButton == pRightRadioButton)
{
pSlider->setTextBoxStyle(Slider::TextBoxRight, false, 80, 20);
}
}
Логика работы программы представлена реализацией метода .
void TCentralComponent::sliderValueChanged(Slider* pSlider)
{
// Если пользователь двигает ползунок,
// отображаем это в виде изменения
// полосы выполнения
dProgress = (pSlider->getValue()) / 100.0;
}
При изменении пользователем положения ползунка, что и приводит к вызову метода, мы присваиваем переменной dProgress новое значение, что и приводит к изменению полосы выполнения. Поскольку значения отслеживаемой ею переменной должны колебаться в пределах от 0 до 1, мы делим текущее значение ползунка на 100.
Класс ScrollBar отвечает за создание полосы прокрутки — важной составляющей пользовательского интерфейса. С её помощью отображаются текстовые или графические данные, превышающие отведённую для них область просмотра. Используя указатель текущего положения полосы прокрутки, можно перемещать данные в видимую область.
Отдельно полосы прокрутки используются очень редко. Удобнее создать объект класса Viewport (область просмотра) и подключить к нему дочерний компонент, положение которого относительно области просмотра необходимо изменять, методом void Viewport::setViewedComponent(Component* newViewedComponent). Кроме того, многие компоненты (например, TextEditor) включают уже готовые полосы прокрутки, по умолчанию появляющиеся, когда содержимое компонента выходит за пределы области просмотра.
Основными свойствами ScrollBar являются положение (вертикальное или горизонтальное), а также диапазон значений.
Положение полосы прокрутки задаётся методом void ScrollBar::setOrientation(bool shouldBeVertical). В случае, если параметр функции принимает значение true, то направление полосы прокрутки будет вертикальным; в противном случае — горизонтальным.
Узнать текущее положение полосы прокрутки позволяет метод bool ScrollBar::isVertical() const throw ().
Задать диапазон значений, на которые может быть смещена головка полосы прокрутки позволяет метод void ScrollBar::setRangeLimits(double minimum, double maximum), где принимаемые параметры — минимальное и максимальное значения смещения, соответственно. Получить минимальное и максимальное значение текущего диапазона позволяют методы double ScrollBar::getMinimumRangeLimit() const throw() и double ScrollBar::getMaximumRangeLimit() const throw().
Задать новое положение головки полосы прокрутки можно с помощью метода void ScrollBar::setCurrentRangeStart(double newStart).
В этой лекции мы научились создавать и использовать в своих программах различного рода ползунки с помощью одного класса, . Внешний вид ползунка устанавливается идентификаторами SlyderStyle.
Создайте платформ-независимый проект с помощью Introjucer на основе листингов лекции. Соберите программу, включающую окно с изменяемыми размерами для
Вашей среды разработки. Поэкспериментируйте с внешним видом окна.
Архив с исходными текстами примера Вы можете скачать здесь.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.