#qt #qml #qt5 #qvalidator
#qt #qml #qt5 #qvalidator
Вопрос:
У меня есть QT QRegExpValidator
( RegExpValidator
в QML), который ограничивает ввод текста только буквенно-цифровым содержимым.
Однако, когда пользователи вставляют строки в my TextField
, иногда эти строки заканчиваются символом новой строки, что приводит к сбою проверки, и поэтому строка никогда не вставляется.
Я читал, что реализация fixup
метода дает вам возможность очистить строки, чтобы они правильно работали с валидатором. Однако, похоже, это не работает при вставке — строки по-прежнему не вставляются.
Как мне заставить это работать так, как я хочу?
Мой код выглядит следующим образом:
LoginValidator { id: alphaNumValidator; regExp: /(?:[0-9A-Za-z]) $/ }
И LoginValidator
реализация выглядит следующим образом:
class LoginValidator : public QRegExpValidator
{
Q_OBJECT
public:
virtual void fixup(QString amp;input) const override
{
input = input.simplified().remove(' ');
}
};
Комментарии:
1. @eyllanescis разве это не то, что я использую? я не вижу разницы между вашим регулярным выражением и моим 😅
2. @eyllanesc хм, похоже, это не опечатка, все работает просто отлично… это просто необработанное регулярное выражение, которое
regExp
принимает
Ответ №1:
Похоже, что fixup
метод не вызывается в validate
методе a QRegExpValidator
. Чтобы заставить это работать, мне пришлось переопределить validate
метод и вызвать там метод fixup перед вызовом родительского validate
метода.
QValidator::State LoginValidator::validate(QString amp;input, int amp;pos) const
{
fixup(input);
return QRegExpValidator::validate(input, pos);
}
Комментарии:
1. Чувак, ты ГЕНИЙ! Спасибо!
2. Хороший обходной путь, но он вообще не нужен. Пожалуйста, отправьте отчет об ошибке в отношении любого компонента widget / QQ2, который вы используете для ввода текста.