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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с QDoubleValidator  (Прочитано 13563 раз)
Timebird
Гость
« : Август 20, 2015, 18:17 »

Здравствуйте!
Для полей QLineEdit пишу "защиту от дурака" по книге Прохоренок.
Нужно написать валидатор, который блокирует любые символы, кроме чисел на отрезке [0.00, 15.34].
Вопрос: почему такой метод не работает? По-прежнему можно вводить числа больше 15.34, вплоть 99,99.

Код
Python
validator_a = QtGui.QDoubleValidator(0.00, 15.34, 2, self)
validator_a.setNotation(QtGui.QDoubleValidator.StandardNotation)
 
« Последнее редактирование: Август 20, 2015, 18:31 от Timebird » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Август 20, 2015, 19:07 »

Для флотов невалидные значения должны отображаться в UI (но не приниматься). Пример:

диапазон 0.. 15.34. Юзер ввел 1.53, все валидно и хорошо. Теперь юзер заметил свою ошибку, оказывается надо было не 1.53 а 15.3. Блокируя невалидные значения в UI Вы поставите его в неприятное положение - ведь забить точку он не сможет, получится 153. И еще 1 точку тоже не может. Придется бедняге затирать все и вводить по новой, поминая автора "незлым тихим словом"  Улыбающийся
Записан
Timebird
Гость
« Ответ #2 : Август 20, 2015, 19:17 »

Хммм, понятно, спасибо!)
А как тогда быть? Должен же быть валидатор под такие числа!
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Август 21, 2015, 10:10 »

Хммм, понятно, спасибо!)
А как тогда быть? Должен же быть валидатор под такие числа!
Так он и есть, просто когда снимется фокус с этого edit, невалидное значение должно подрезаться до валидного и отобразиться
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #4 : Август 21, 2015, 12:57 »

Нужно написать валидатор, который блокирует любые символы, кроме чисел на отрезке [0.00, 15.34].

я лично против валидаторов - они мешают вводу, а проверку всеравно делать
например я буду вводить 1234 - но не смогу, и не пойму почему
а если по кнопке "ок" будет проверка с соответствующим сообщением, то валидатор лишний

Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #5 : Август 21, 2015, 13:23 »

А я люблю использовать уже готовое средство QDoubleSpinBox. И валидатор какой нужно встроен, и пользователю понятно, почему он не может ввести 1234
Записан
Timebird
Гость
« Ответ #6 : Август 21, 2015, 15:54 »

А после ввода проверку выполнять -- здоровенская идея! A как с помощью QDoubleSpinBox? Улыбающийся
« Последнее редактирование: Август 21, 2015, 15:57 от Timebird » Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #7 : Август 21, 2015, 16:02 »

Просто помещается на форму контрол, в который можно вводить числа двойной точности и делать инкремент по шагам. Задаётся ему мин, макс, точность и шаг инкремента. Всю грязную работу выполняет на ура. Кнопки можно заменить на +/- или вообще убрать, получится на вид как тот же QLineEdit.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Август 21, 2015, 16:04 »

А после ввода проверку выполнять -- здоровенская идея!
Так это в самом валидаторе и делается (не помню деталей но возможность этого точно есть)
Записан
Timebird
Гость
« Ответ #9 : Август 21, 2015, 17:12 »

Больше всего понравилась затея ув. __Heaven__ сделать QDoubleSpinBox с декрементом по шагам.
А как теперь ограничить порог сверху?
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #10 : Август 21, 2015, 17:24 »

См. документацию по QDoubleSpinBox
def setDecimals (prec)
def setMaximum (max)
def setMinimum (min)
def setSingleStep (val)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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