crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> HexSpinBox из примера в книге Бланшет
Steklova Olga
  опции профиля:
сообщение 23.12.2011, 16:18
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

Спасибо сказали: 5 раз(а)




Репутация:   4  


Здравствуйте!
Мне понадобился в программе виджет для редактирования 16-ного числа с диапазоном [0..FFFFFF].
Использовала для этого QLineEdit.
QRegExp regExp("[0-9A-Fa-f]{0,6}"); 
lineEdit->setValidator(new QRegExpValidator(regExp, this));
Более-менее работает, но хочется менять значение по стрелочкам, как в QSpinBox.
Нашла в книге Ж.Бланшет "Qt4 программирование QUI на C++" в главе 5 пример,
где на основе QSpinBox создается класс HexSpinBox.
Там установлен диапазон значений, он правильно анализируется при изменении значения по стрелочкам, НО юзер может ввести значение, превышающее диапазон. Как это исправить?

Сообщение отредактировал Steklova Olga - 27.12.2011, 10:33
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Steklova Olga
  опции профиля:
сообщение 26.12.2011, 10:52
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

Спасибо сказали: 5 раз(а)




Репутация:   4  


Спасибо за внимание, BlueIceScream :)
Заменила в книжном примере функцию validate и указала в конструкторе диапазон значений:
QValidator::State HexSpinBox::validate(QString &text, int &pos) const
{
    int value = text.toInt(0, 16);
    if ((value >= this->minimum()) && (value <= this->maximum()))
        return (validator->validate(text,pos));
    else
        return QValidator::Invalid;
}
HexSpinBox::HexSpinBox(QWidget *parent)
    : QSpinBox(parent)
{
    setRange(0x0, 0xFFFFFF);
    validator = new QRegExpValidator(QRegExp("[0-9A-Fa-f]{1,6}"), this);
}
При таком-то диапазоне все чудно работает: можно вводить значения и в строке, и менять по стрелкам, в обоих случаях проверяется диапазон.
НО, если в setRange указать ненулевое min значение, то программа тут же сломается!!! Что с этим делать?
А можно еще сделать так, чтобы юзеру было разрешено в строке вводить 'a'...'f', но они бы сразу отображались в верхнем регистре?
А вариант с использованием QLineEdit мне не очень нравится, потому что в этом случае юзер может совсем стереть значение в QLineEdit и мне придется принудительно вписывать туда какое-нибудь значение, например минимальное, и удобных стрелочек там нет, и диапазон там так легко не задашь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.11.2024, 6:24