Russian Qt Forum
Ноябрь 22, 2024, 23:04 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как настроить QLineEdit, чтобы он принимал только числа и точку  (Прочитано 9220 раз)
Bolonat
Чайник
*
Offline Offline

Сообщений: 56


Qt Creator 4.5.0 на Qt 5.10.0 (W10 x64) MinGW 5.3.


Просмотр профиля
« : Июнь 10, 2019, 08:34 »

Здравствуйте!
Мне нужно сделать поле ввода для float, но такое, чтобы после запятой, можно было ввести произвольное количество цифр.
Не использую QDoubleSpinBox, потому что в нем указывается точность, и если установить 5 знаков, то даже целое число отображается с пятью нулями после запятой. Это некрасиво. Хочу использовать для этой цели  QLineEdit, помогите настроить валидатор так, чтобы в поле могли отображаться только цифры, минус и точка.
Например:
Код:
ui->lE_CycleTime->setValidator(new QRegExpValidator(QRegExp("^([1-9][0-9]*|0)(\\.|,)[0-9]{2}"), this));
Но, это не работает так как мне нужно.
« Последнее редактирование: Июнь 10, 2019, 09:22 от Bolonat » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Июнь 10, 2019, 09:36 »

Попробуйте QDoubleValidator.
Записан
Bolonat
Чайник
*
Offline Offline

Сообщений: 56


Qt Creator 4.5.0 на Qt 5.10.0 (W10 x64) MinGW 5.3.


Просмотр профиля
« Ответ #2 : Июнь 10, 2019, 10:24 »

Попробуйте QDoubleValidator.

Не помогает. Пишу
Код:
ui->minVal->setValidator(new QDoubleValidator(0, 100, 2, this));
И не могу после этого ввести точку. Разрешает ввод только цифр.
А если еще предварительно устанавливаю значение по умолчанию
Код:
ui->minVal->setText(QString::number(3.14));
то могу к нему добавлять буквы (
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #3 : Июнь 10, 2019, 13:06 »

Попробуйте поиграть с setNumberOptions у локали валидатора.
Записан
Bolonat
Чайник
*
Offline Offline

Сообщений: 56


Qt Creator 4.5.0 на Qt 5.10.0 (W10 x64) MinGW 5.3.


Просмотр профиля
« Ответ #4 : Июнь 10, 2019, 13:56 »

Нужного эффекта удалось добиться перехватом keyPressEvent() для QLineEdit.

Код:
void LineEditEvent::keyPressEvent (QKeyEvent *event)
{
     int key=event->key();
     if (key>=Qt::Key_0 && key<=Qt::Key_9||
             key==Qt::Key_Period||
             key==Qt::Key_Backspace||
             key==Qt::Key_Delete||
             key==Qt::Key_Minus)
      QLineEdit::keyPressEvent(event);
}
« Последнее редактирование: Июнь 10, 2019, 13:59 от Bolonat » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #5 : Июнь 10, 2019, 14:15 »

скорее всего у тебя в ОС разделитель целой и дробной части — запятая, а не точка, поэтому точка и не вводится через QDoubleValidator.

в setNumberOptions не похоже, чтоб можно было задавать доступные разделители.

остается только писать регулярное выражение (что-то типа ^(?:0|[1-9]\d*)(?:[.,]\d+)?$) или свою проверку ввода.
Цитировать
Нужного эффекта удалось добиться перехватом keyPressEvent() для QLineEdit.
так оно ж не проверяет корректность ввода Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Bolonat
Чайник
*
Offline Offline

Сообщений: 56


Qt Creator 4.5.0 на Qt 5.10.0 (W10 x64) MinGW 5.3.


Просмотр профиля
« Ответ #6 : Июнь 10, 2019, 14:26 »

так оно ж не проверяет корректность ввода Улыбающийся
Корректность ввода я проверяю уже после того как нажали Ok в слоте accept(), а мне хотелось изначально в QLineEdit запретить ввод букв, и других ненужных символов.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.049 секунд. Запросов: 22.