2016-08-29 28 views
1

Как установить валидатор ввода в QLineEdit таким образом, чтобы он ограничивал его действительным IP-адресом? т.е. х.х.х.х где х должен находиться в диапазоне от 0 до 255.and й не может быть пустымQT Проверка правильности ввода QlineEdit

+0

Вы прочитали документацию по 'QValidator' ? Начните оттуда. У вас есть в основном два варианта, создайте свой собственный подкласс «IpValidator» или используйте проверки правильности выражения. – hyde

+0

Возможный дубликат [Как установить 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

ответ

1

Ответ here

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

2

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

Теперь просто прочитайте свой ввод, и валидатор будет проверять 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."); 
} 
+0

Он принимает значение больше 255. и мы можем ввести 133.133. вместо 4 частей. он может принимать менее 4 частей ip-адреса. Пожалуйста, предложите, как мы можем проверить, что IP-адрес должен содержать 4 части с диапазоном 0-255 –

+0

См. Мои последние изменения. Вот лучший, который я нашел до сих пор: \ 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