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
在应该提交值时调用(小部件失去焦点或按下输入)并且必须能够将输入从中间状态转换为有效。
在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
在应该提交值时调用(小部件失去焦点或按下输入)并且必须能够将输入从中间状态转换为有效。