Как записать в QLineEdit
числа с плавающей запятой в диапазоне (0.0 - 5.0)? Я использую qregexp для такой задачи, например, QRegExp a("([a-zA-Z]{3,30})")
для записи имени пользователя, но не имею идей для записи чисел с плавающей запятой.
Записывайте только значения с плавающей запятой в QLineEdit
Ответы (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])
. В любом случае, я рекомендую использовать валидатор, поскольку регулярное выражение сложнее масштабировать, если диапазон изменяется в проекте или во время выполнения.
QLineEdit
и QDoubleValidator
вы также можете использовать QDoubleSpinBox
. Это немного больше похоже на то, что пользователь может переходить от одного значения к другому с помощью колесика мыши.
- person Benjamin T; 25.09.2017
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