Russian Qt Forum

Программирование => Python => Тема начата: Timebird от Август 20, 2015, 18:17



Название: Проблема с QDoubleValidator
Отправлено: 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)
 


Название: Re: Проблема с QDoubleValidator
Отправлено: Igors от Август 20, 2015, 19:07
Для флотов невалидные значения должны отображаться в UI (но не приниматься). Пример:

диапазон 0.. 15.34. Юзер ввел 1.53, все валидно и хорошо. Теперь юзер заметил свою ошибку, оказывается надо было не 1.53 а 15.3. Блокируя невалидные значения в UI Вы поставите его в неприятное положение - ведь забить точку он не сможет, получится 153. И еще 1 точку тоже не может. Придется бедняге затирать все и вводить по новой, поминая автора "незлым тихим словом"  :)


Название: Re: Проблема с QDoubleValidator
Отправлено: Timebird от Август 20, 2015, 19:17
Хммм, понятно, спасибо!)
А как тогда быть? Должен же быть валидатор под такие числа!


Название: Re: Проблема с QDoubleValidator
Отправлено: Igors от Август 21, 2015, 10:10
Хммм, понятно, спасибо!)
А как тогда быть? Должен же быть валидатор под такие числа!
Так он и есть, просто когда снимется фокус с этого edit, невалидное значение должно подрезаться до валидного и отобразиться


Название: Re: Проблема с QDoubleValidator
Отправлено: qate от Август 21, 2015, 12:57
Нужно написать валидатор, который блокирует любые символы, кроме чисел на отрезке [0.00, 15.34].

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



Название: Re: Проблема с QDoubleValidator
Отправлено: __Heaven__ от Август 21, 2015, 13:23
А я люблю использовать уже готовое средство QDoubleSpinBox. И валидатор какой нужно встроен, и пользователю понятно, почему он не может ввести 1234


Название: Re: Проблема с QDoubleValidator
Отправлено: Timebird от Август 21, 2015, 15:54
А после ввода проверку выполнять -- здоровенская идея! A как с помощью QDoubleSpinBox? :)


Название: Re: Проблема с QDoubleValidator
Отправлено: __Heaven__ от Август 21, 2015, 16:02
Просто помещается на форму контрол, в который можно вводить числа двойной точности и делать инкремент по шагам. Задаётся ему мин, макс, точность и шаг инкремента. Всю грязную работу выполняет на ура. Кнопки можно заменить на +/- или вообще убрать, получится на вид как тот же QLineEdit.


Название: Re: Проблема с QDoubleValidator
Отправлено: Igors от Август 21, 2015, 16:04
А после ввода проверку выполнять -- здоровенская идея!
Так это в самом валидаторе и делается (не помню деталей но возможность этого точно есть)


Название: Re: Проблема с QDoubleValidator
Отправлено: Timebird от Август 21, 2015, 17:12
Больше всего понравилась затея ув. __Heaven__ сделать QDoubleSpinBox с декрементом по шагам.
А как теперь ограничить порог сверху?


Название: Re: Проблема с QDoubleValidator
Отправлено: __Heaven__ от Август 21, 2015, 17:24
См. документацию по QDoubleSpinBox (https://srinikom.github.io/pyside-docs/PySide/QtGui/QDoubleSpinBox.html)
def setDecimals (prec)
def setMaximum (max)
def setMinimum (min)
def setSingleStep (val)