如何设置输入验证器以QLineEdit
将其限制为有效的 IP 地址?ixxxx 其中 x 必须介于 0 和 255 之间。并且 x 不能为空
问问题
8327 次
2 回答
4
您正在寻找QRegExp和QValidator,以验证 IPv4 使用此表达式:
\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b
例子:
QRegExp ipREX("\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b");
ipREX.setCaseSensitivity(Qt::CaseInsensitive);
ipREX.setPatternSyntax(QRegExp::RegExp);
现在,将其用作文本 lineedit 的验证器:
QRegExpValidator regValidator( rx, 0 );
ui->lineEdit->setValidator( ®Validator );
现在,只需阅读您的输入,验证器就会对其进行验证 =)。如果您想手动执行此操作,请尝试以下操作:
ui->lineEdit->setText( "000.000.000.000" );
const QString input = ui->lineEdit->text();
// To check if the text is valid:
qDebug() << "IP validation: " << myREX.exactMatch(input);
还有另一种使用 Qt 类QHostAddress和QAbstractSocket的方法:
QHostAddress address(input);
if (QAbstractSocket::IPv4Protocol == address.protocol())
{
qDebug("Valid IPv4 address.");
}
else if (QAbstractSocket::IPv6Protocol == address.protocol())
{
qDebug("Valid IPv6 address.");
}
else
{
qDebug("Unknown or invalid address.");
}
于 2016-08-29T10:03:02.990 回答
1
答案在 这里
简而言之:您必须QRegExpValidator
为 IP4 地址设置适当的正则表达式。
于 2016-08-29T09:59:33.007 回答