我想要接受IP地址的行编辑。如果我输入掩码为:

ui->lineEdit->setInputMask("000.000.000.000");

它接受的值大于255。如果我提供验证器,则必须在每三位数字后加上点(.)。最好的处理方式是什么?

最佳答案



绝对是因为“0”表示this:

ASCII digit permitted but not required.

如您所见,这不是您的一杯茶。至少有以下几种方法可以避免此问题:
  • 编写自定义验证程序
  • 使用正则表达式
  • 将输入分为四个条目,并单独验证每个条目,同时在条目之间仍然具有视觉定界符。

  • 正则表达式解决方案可能是最快的,但也是最丑陋的恕我直言:
    QString ipRange = "(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])";
    // You may want to use QRegularExpression for new code with Qt 5 (not mandatory).
    QRegExp ipRegex ("^" + ipRange
                     + "\\." + ipRange
                     + "\\." + ipRange
                     + "\\." + ipRange + "$");
    QRegExpValidator *ipValidator = new QRegExpValidator(ipRegex, this);
    lineEdit->setValidator(ipValidator);
    

    免责声明:这只会正确验证IP4地址,因此如果将来需要,它将不适用于IP6。

    09-06 15:37