QSpinBox 阻止用户输入千位分隔符

QSpinBox prevent the user from enternig thousand separators

在QSpinBox中,当范围足够时,允许用户输入千位分隔符。
例如:1.2.3.4 是一个有效条目,en 然后 fixup() 只是删除点。结果为 1234.

如何防止用户输入千位分隔符?

之前我基于使用验证器的 QLineEdit 做了类似的东西。
但是 QAbstractSpinbox 不使用 QValidators。所以我不确定如何进行。

只需覆盖 validate 并在包含不需要的字符时拒绝输入。

可能是这样的:

QValidator::State MySpinBox::validate(QString &input, int &pos) const
{
    if (input.contains(ThousandSeparator)) {
        return QValidator::Invalid;
    }
    return QSpinBox::validate(input, pos);
}

请不要贪婪用户可以做什么和不能做什么,因为限制性规则会让最终用户感到厌烦。

validate 每当内容改变时调用。 fixup 在应该提交值时调用(小部件失去焦点或按下输入)并且必须能够将输入从中间状态转换为有效。