Как установить валидатор ввода в QLineEdit таким образом, чтобы он ограничивал его действительным IP-адресом? т.е. х.х.х.х где х должен находиться в диапазоне от 0 до 255.and й не может быть пустымQT Проверка правильности ввода QlineEdit
ответ
Ответ here
Короче говоря: Вы должны установить QRegExpValidator
с соответствующим регулярным выражением для IP4 адресов.
Вы ищете QRegExp и QValidator, для проверки IPv4-использовать этот expresion:
\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);
Теперь просто прочитайте свой ввод, и валидатор будет проверять it =). Если вы хотите сделать это вручную, попробовать что-то вроде этого:
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.");
}
Он принимает значение больше 255. и мы можем ввести 133.133. вместо 4 частей. он может принимать менее 4 частей ip-адреса. Пожалуйста, предложите, как мы можем проверить, что IP-адрес должен содержать 4 части с диапазоном 0-255 –
См. Мои последние изменения. Вот лучший, который я нашел до сих пор: \ 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]?) \ б – mohabouje
Вы прочитали документацию по 'QValidator' ? Начните оттуда. У вас есть в основном два варианта, создайте свой собственный подкласс «IpValidator» или используйте проверки правильности выражения. – hyde
Возможный дубликат [Как установить Input Mask и QValidator в QLineEdit за раз в Qt?] (Http://stackoverflow.com/questions/23166283/how-to-set-input-mask-and-qvalidator-to -a-qlineedit-at-time-in-qt) – Tarod