Записывайте только значения с плавающей запятой в QLineEdit

Как записать в QLineEdit числа с плавающей запятой в диапазоне (0.0 - 5.0)? Я использую qregexp для такой задачи, например, QRegExp a("([a-zA-Z]{3,30})") для записи имени пользователя, но не имею идей для записи чисел с плавающей запятой.


person Community    schedule 23.09.2017    source источник
comment
Не уверен, что вы имеете в виду, когда пишете, но вы ищете подтверждения? См. QDoubleValidator.   -  person    schedule 23.09.2017


Ответы (2)


Лучше всего использовать для такой задачи QDoubleValidator, так как он не будет проверьте не только форму ввода, но и диапазон:

auto dv = new QDoubleValidator(0.0, 5.0, 2); // [0, 5] with 2 decimals of precision
yourLineEdit->setValidator(dv);

Если вы имеете дело со многими десятичными знаками (или если вы планируете изменить диапазон на более широкий), вам, вероятно, будет интересно отключить экспоненциальное представление:

dv->setNotation(QDoubleValidator::StandardNotation);

С другой стороны, и для полноты ответа, поскольку вы просили регулярные выражения, общее регулярное выражение для числа с плавающей запятой — [-+]?[0-9]*\.?[0-9]+, поэтому для вашего конкретного диапазона вы можете попробовать: ([0-4]?\.[0-9]+)|(5\.0+)|([0-5]). В любом случае, я рекомендую использовать валидатор, поскольку регулярное выражение сложнее масштабировать, если диапазон изменяется в проекте или во время выполнения.

person cbuchart    schedule 25.09.2017
comment
@mark1999 mark1999 Вместо использования QLineEdit и QDoubleValidator вы также можете использовать QDoubleSpinBox. Это немного больше похоже на то, что пользователь может переходить от одного значения к другому с помощью колесика мыши. - person Benjamin T; 25.09.2017
comment
@БенджаминТ +1. Я тоже согласен: QDoubleSpinBox было бы более приятным и чистым решением, если бы ОП мог отложить QLineEdit. - person cbuchart; 26.09.2017

Используя регулярное выражение и разбивая диапазоны, 0,0–5,0 будет:

[0-4]\.\d|5\.0

Расширенный

   #  0.0  to  4.9
   [0-4] \. \d 
|  
   #  5.0
   5 \. 0
person Community    schedule 01.12.2019