Qt QLineEdit Проверка ввода

Как бы установить валидатор ввода на QLineEdit такой, что это ограничивает его действительным IP-адресом? ie xxxx где x должно быть между 0 и 255.и x не может быть пустым

2 ответа

Вы ищете 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);

Теперь используйте его как валидатор вашего текста:

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

Ответ здесь

Короче говоря: вы должны установить QRegExpValidator с соответствующим регулярным выражением для адресов IP4.

Другие вопросы по тегам