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