了解 QDoubleValidator 范围的行为

Posted

技术标签:

【中文标题】了解 QDoubleValidator 范围的行为【英文标题】:Understanding the behaviour of QDoubleValidator range 【发布时间】:2022-01-01 11:04:54 【问题描述】:

选项“top”和“bottom”的规范似乎有一个奇怪的行为。以下answered question 提供了一些有用的见解,但并不能解决所有问题。

附上代码:

import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

app = QApplication(sys.argv)

input = QLineEdit()
input.setValidator(QDoubleValidator(0.00,10.00,5,notation=QDoubleValidator.StandardNotation))

input.show()
sys.exit(app.exec_())

输入框接受任何低于 100 的数字,但我希望只接受低于 10 的数字...例如,接受 99.55656 就可以了...

我错过了什么?

【问题讨论】:

【参考方案1】:

在您的示例中,行编辑不字面上接受值99.55656。这可以通过调用其hasAcceptableInput 方法来确认,该方法返回False

验证器允许输入值,因为这样做会产生有效的中间状态。根据the docs,这可能发生在“如果多一点编辑可能会使输入可接受”。所以在99.55656 的特定情况下,删除9 会产生一个有效的可接受状态。这似乎意味着应该将“多一点编辑”理解为添加或删除一个单个字符(符号为StandardNotation)。

【讨论】:

以上是关于了解 QDoubleValidator 范围的行为的主要内容,如果未能解决你的问题,请参考以下文章

类范围内的闭包

关于 CoffeeScript 变量范围的困惑

sed的用法

访问静态超出范围的未定义行为吗?

词法范围的排序行为

为啥冗余的额外范围块会影响 std::lock_guard 行为?