Класс QValidator

   
На этом шаге рассмотрим класс QValidator.

   
Объект класса QValidator (контроллер) гарантирует правильность ввода пользователя. Для установки объекта класса QValidator необходимо передать его в метод setValidator(), который содержится в классах QComboBox и QLineEdit. Для проверки ввода чисел пользуются готовыми классами QIntValidator и QDoubleValidator. Создавая свой класс проверки ввода, нужно унаследовать класс от QValidator и перезаписать метод validate(), в который передается вводимая строка и позиция курсора. Метод должен возвращать следующие значения:

  • QValidator::Invalid — если строка не может быть принята;
  • QValidator::Intermediate — строка не может быть принята в качестве конечного результата. Например, если строка должна представлять численное значение от 50 до 100, то введение числа 1 будет представлять собой промежуточное значение;
  • QValidator::Acceptable — если строка может быть принята без изменений.

   
В примере, изображенном на рис. 1, пользователю предлагается ввести имя файла, и специальные символы в этом случае вводить недопустимо. Это отслеживается классом контроллера, который не допускает того, чтобы имя файла содержало специальные символы.


Рис.1. Окно программы, контролирующей данные, вводимые пользователем

   
Рассмотрим фрагмент текста заголовочного файла приложения, представленного рис.1:

//класс FileNameValidator унаследован от класса QValidator
class FileNameValidator : public QValidator {
public:
    FileNameValidator(QObject* parent) : QValidator(parent)
    {
  }
//выполняется перезапись метода validate(),
//который получает вводимый текст и позицию курсора
    virtual State validate(QString& str, int& pos) const
    {
     //создается объект регулярного выражения rxp, в
     //конструктор которого передается шаблон,
     //представляющий собой набор специальных символов
        QRegExp rxp = QRegExp("[!@#$%^&*(){};:<>?№~,"");
        //в операторе if вызовом метода QString::contains()
        //осуществляется проверка строки на содержание
        //в ней заданного шаблона
        if (str.contains(rxp)) {
          //в случае, если совпадение найдено,
          //метод возвращает значение Invalid,
          //сообщая, что ввод не удовлетворяет заданным
          //критериям,
            return Invalid;
        }
        //в противном случае возвращается значение
        //Acceptable и ввод принимается
        return Acceptable;
    }
};

   
В исполняемом файле приложения создается виджет надписи, виджет однострочного текстового поля и объект контроллера (указатель pnameValidator). После создания вызовом метода setValidator() контроллер устанавливается в виджете однострочного текстового поля (указатель ptxt).

FileNameValidator* pnameValidator = new FileNameValidator(ptxt);
ptxt->setValidator(pnameValidator);

   
Файлы приложения можно взять Предыдущий шаг
Содержание
Следующий шаг



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий