Qt QLineEdit 输入验证

Ris*_*sal 4 validation qt qregexp input-mask qregularexpression

如何在 A 上设置输入验证器QLineEdit以将其限制为有效的 IP 地址?iexxxx 其中 x 必须介于 0 到 255 之间。并且 x 不能为空

moh*_*uje 5

您正在寻找QRegExp和QValidator,以使用以下表达式验证 IPv4:

\n\n
\\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-\xe2\x80\x8c\xe2\x80\x8b9]|[01]?[0-9][0-9]?)\xe2\x80\x8c\xe2\x80\x8b\\.(25[0-5]|2[0-4][0-\xe2\x80\x8c\xe2\x80\x8b9]|[01]?[0-9][0-9]?)\xe2\x80\x8c\xe2\x80\x8b\\.(25[0-5]|2[0-4][0-\xe2\x80\x8c\xe2\x80\x8b9]|[01]?[0-9][0-9]?)\xe2\x80\x8c\xe2\x80\x8b\\b\n
Run Code Online (Sandbox Code Playgroud)\n\n

例子:

\n\n
QRegExp ipREX("\\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-\xe2\x80\x8c\xe2\x80\x8b9]|[01]?[0-9][0-9]?)\xe2\x80\x8c\xe2\x80\x8b\\.(25[0-5]|2[0-4][0-\xe2\x80\x8c\xe2\x80\x8b9]|[01]?[0-9][0-9]?)\xe2\x80\x8c\xe2\x80\x8b\\.(25[0-5]|2[0-4][0-\xe2\x80\x8c\xe2\x80\x8b9]|[01]?[0-9][0-9]?)\xe2\x80\x8c\xe2\x80\x8b\\b");\nipREX.setCaseSensitivity(Qt::CaseInsensitive);\nipREX.setPatternSyntax(QRegExp::RegExp);\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在,使用它作为文本行编辑的验证器:

\n\n
QRegExpValidator regValidator( rx, 0 );\nui->lineEdit->setValidator( &regValidator );\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在,只需读取您的输入,验证器就会验证它 =)。如果您想手动执行此操作,请尝试以下操作:

\n\n
ui->lineEdit->setText( "000.000.000.000" );\nconst QString input = ui->lineEdit->text();\n// To check if the text is valid:\nqDebug() << "IP validation: " << myREX.exactMatch(input);\n
Run Code Online (Sandbox Code Playgroud)\n\n

还有另一种方法可以使用 Qt 类QHostAddress和QAbstractSocket来实现:

\n\n
QHostAddress address(input);\nif (QAbstractSocket::IPv4Protocol == address.protocol())\n{\n   qDebug("Valid IPv4 address.");\n}\nelse if (QAbstractSocket::IPv6Protocol == address.protocol())\n{\n   qDebug("Valid IPv6 address.");\n}\nelse\n{\n   qDebug("Unknown or invalid address.");\n}\n
Run Code Online (Sandbox Code Playgroud)\n