我的项目中有一个QLineEdit。 我想在lineEdit上使用QValidation。
#Create lineEdit
itemValue = QtWidgets.QLineEdit()
#Create валидатор
objValidator = QtGui.QDoubleValidator(self)
#setup range
objValidator.setRange(-10.0, 100.0, 5)
#lineEdit with validation
itemValue.setValidator(objValidator)
但它不能很好地工作。我可以输入我想要的东西,除了符号。 并且范围不起作用!我可以键入100500或-100500,但我想,用户只能在范围内输入数字。
我应该如何使用范围? 我需要帮助:))
感谢您的帮助,伙计们!
答案 0 :(得分:4)
默认情况下,验证程序不会阻止输入范围之外的值,如果输入的值为Invalid or Intermediate,则不会阻止用户离开控件。
但是,如果安装了验证程序,则行编辑不会发出editingFinished或returnPressed信号,其hasAcceptableInput方法将返回False
,如果当前值不可接受。所以它确实让你有机会拒绝输入。此外,如果您对验证程序进行子类化,则可以重新实现其fixup方法来控制输入的值。
但是,正如已经建议的那样,QDoubleSpinBox
可能是您当前用例的最佳解决方案。
答案 1 :(得分:3)
作为替代方案,您可以使用QDoubleSpinBox。
答案 2 :(得分:0)
可能你期待一些不应该发生的事情 通常,当您有验证器时,您应该能够在中间状态键入一些不完全符合限制的内容。但是当编辑失去焦点时,这应该是固定的。
为什么呢?想象一下,如果您要84
,请将其更正为-8.4
。许多人都会这样做:添加减去所以现在你有-84
这是不可接受的,然后添加点。如果验证器立即修复了这个问题,那么对用户来说会很烦人。
所以,当编辑失去焦点时,底线是否会发生这个“问题”?