Qt QLineEdit输入验证

4

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


你有阅读过 QValidator 的文档吗?从那里开始。你基本上有两个选择,创建自己的子类 "IpValidator",或使用正则表达式验证器。 - hyde
2个回答

5

您需要使用QRegExpQValidator来验证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);

现在,将它用作文本行编辑器的验证器:
QRegExpValidator regValidator( rx, 0 );
ui->lineEdit->setValidator( &regValidator );

现在,只需阅读您的输入,验证程序将对其进行验证。如果想手动执行此操作,请尝试以下步骤:

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类 QHostAddressQAbstractSocket 来实现的方法:

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.");
}

它正在接受大于255的值。我们可以输入133.133.而不是4个部分。它能够接受少于4个ip地址部分。请建议如何验证ip地址必须包含4个范围为0-255的部分。 - Rishabh Bansal
看看我的最新更改。这是我迄今为止找到的最好的一个:\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 - mohabouje

1
答案在这里
简而言之:您需要使用适当的正则表达式设置QRegExpValidator,以用于IP4地址。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接