QML使用多个掩码保护的文本输入掩码

  • 本文关键字:掩码 文本 保护 QML qt qml
  • 更新时间 :
  • 英文 :


是否有办法使TextInput inputMask保护多个条件?例如:

inputMask: ("9999" || "9999-9999") // syntax probably wrong

接受输入:

  • 1234
  • 1234 - 3456

编辑:右侧输入(xxxx-rhs)也必须大于左侧。

验证实现可能不是最有效或可读的,但它完成了工作。看看这个GitHub仓库自定义验证器。

QValidator::State SpecialValidator::validate(QString &input, int &pos) const
{
if (input.isEmpty())
return QValidator::Acceptable;
static QRegularExpression expression("^\d{0,4}$");
QRegularExpressionMatch expressionMatch = expression.match(input);
if (expressionMatch.hasMatch()) {
if (expressionMatch.captured(0).size() != 4)
return QValidator::Intermediate;
return QValidator::Acceptable;
}
static QRegularExpression advancedExpression("^(\d{4})-(\d{0,4})$");
QRegularExpressionMatch advancedExpressionMatch = advancedExpression.match(input);
if (advancedExpressionMatch.hasMatch()) {
QString lhs = advancedExpressionMatch.captured(1);
const QString rhs = advancedExpressionMatch.captured(2);
if (rhs.isEmpty())
return QValidator::Intermediate;
if (rhs.size() == 4)
return lhs.toInt() < rhs.toInt() ? QValidator::Acceptable : QValidator::Invalid;
lhs.truncate(rhs.size());
return lhs.toInt() <= rhs.toInt() ? QValidator::Intermediate : QValidator::Invalid;
}
return QValidator::Invalid;
}

最新更新