QLineEdit валидаторы

Итак речь о QLineEdit

валидаторы

Используем QDoubleValidator. Что сразу не так: по смыслу валидатор должен ограничивать неправильный ввод текста, в нашем случае число с плавающей точкой.

И вроде бы он ограничивает, но обратите внимание еа картинке ограничение использовано 22, а по факту 25 позволено ввести. Правда три цифры уже не получается никак.

фотка 1

В чем проблема? Как решать. Можно конечно унаследоваться от QLineEidt, попробовать установить eventFilter, чтобы перехватить событие нажатиея клавиши QEvent::KeyPress

Но как ни странно это не решает проблему . Дело в том,ч то в момент прихода события  QEvent::KeyPress в eventFilter  текст уже изменен (25), то есть text() возвращает уже 25. 

Что еще можно сделать? Можно перехватить событие keyPressEvent виджета. И это сработает!

void QLineEdit_Sum::keyPressEvent(QKeyEvent * event)
{
    qDebug() << pbl::toStr_Event_Type( event->type() );

    if(event->matches(QKeySequence::Copy)
            || event->matches(QKeySequence::Cut)
            || event->matches(QKeySequence::Paste))
        event->ignore();

    if(event->type() == QEvent::KeyPress)
    {
        QKeyEvent *key = static_cast(event);

        qDebug() << " keyPressEvent "<< key->key()<< " :: " << key->text();

        QByteArray ba =  key->text().toLocal8Bit();

        if( ba.count() == 1
                && ba.at(0) >=0x30
                &&  ba.at(0) <=0x39 )
        {
            qDebug() << "  toLocal8Bit : " << ba.at(0);

            QString sum = text() key->text();

            qDebug() << "sum  " << sum;


            int pos;

            if( vld->validate( sum , pos ) != QValidator::Acceptable)
            {
                qDebug() << "!= QValidator::Acceptable  "<< sum;

                event->ignore();
                return;
            }
        }

    }

    QLineEdit::keyPressEvent(event);
}

То есть теперь значение больше 22 никак не ввести.