На этом шаге рассмотрим класс QSpinBox.
Виджет QSpinBox предоставляет пользователю доступ к ограниченному диапазону чисел. Все вводимые значения проверяются, для предотвращения выхода за пределы диапазона, который устанавливается методом setRange(). Значения можно устанавливать с помощью метода setValue(), а получать — методом value(). При изменении значений посылаются сразу два сигнала valueChanged(): один с параметром типа int, а другой — с const QString&.
Можно изменить способ отображения с помощью методов setPrefix() и setSuffix(). Например, вызов следующих методов приведет к тому, что число будет отображаться в скобках:
pspb->setPrefix("(");
pspb->setSuffix(")");
Можно изменить изображение стрелок на символы + (плюс) или ? (минус), передав методу setButtonSymbols() флаг PlusMinus.
На рис. 1 изображен пример, позволяющий выбирать толщину рамки для надписи.

Рис.1. Пример счетчика
Для реализации примера, представленного рис.1, определим класс SB, который наследуется от класса QWidget:
class SB : public {
Q_OBJECT
private:
//объявляем переменные
QSpinBox *s;
QLabel *l;
QString str;
public:
//объявляем конструктор класса
SB(QWidget* pobj = 0);
public slots:
//объявляем слот
void slotBorder ();Рассмотрим реализацию конструктора класса:
SB::SB(QWidget* pwgt/*= 0*/)
: QWidget(pwgt)
{
//создаем счетчик
s = new QSpinBox;
//задаем диапазон значений
s->setRange(0,10);
//задаем значение счетчика,
//которое отображентся при запуске приложения
s->setValue(3);
//устанавливаем циклический режим
s->setWrapping(true);
//создаем надпись
l = new QLabel;
l->setAlignment(Qt::AlignCenter);
l->setFrameStyle(QFrame::Box|QFrame::Raised);
//задаем в качестве толщины рамки значение,
//установленное в счетчике
l->setLineWidth(s->value());
l->setMidLineWidth(2);
//сохраняем число, установленное в счетчике в строке
str=QString::number(s->value());
//выводим число, установленное в счетчике, в надписи
l->setText(str);
//сигнал счетчика, который возникает при изменении
//значения в нем, вызывает выполнение слота, который
//изменяет толщину рамки надписи и ее текст
QObject::connect(s, SIGNAL(valueChanged(int)), SLOT(slotBorder()));
QVBoxLayout* pvbL = new QVBoxLayout;
pvbL->addWidget(s);
pvbL->addWidget(l);
setLayout(pvbL);
}Рассмотрим реализацию слота:
//слот устанавливает толщину рамки и текст надписи
void SB::slotBorder()
{
str=QString::number(s->value());
l->setLineWidth(s->value());
l->setMidLineWidth(2);
l->setText(str);
}Файлы приложения можно взять здесь.
На следующем шаге рассмотрим элемент ввода даты и времени - класс QDateTimeEdit.