Шаг 52.
Библиотека Qt.
Класс QSpinBox

    На этом шаге рассмотрим класс 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.




Предыдущий шаг Содержание Следующий шаг