2016-08-29 2 views
1

Comment définir un validateur d'entrée sur un QLineEdit de telle sorte qu'il le limite à une adresse IP valide? à savoir x.x.x.x où x doit être comprise entre 0 et 255.and x ne peut pas être videQT QlineEdit Validation d'entrée

+0

Avez-vous lu les documents de 'QValidator' ? Commencez à partir de là. Vous avez essentiellement deux options, créez votre propre sous-classe "IpValidator", ou utilisez les validateurs d'expressions régulières. – hyde

+0

Copie possible de [Comment régler le masque de saisie et QValidator à un QLineEdit à la fois dans Qt?] (Http://stackoverflow.com/questions/23166283/how-to-set-input-mask-and-qvalidator-to -a-qlineedit-at-a-time-in-qt) – Tarod

Répondre

1

La réponse est here

En bref: Vous devez définir QRegExpValidator avec le approprié pour une expression régulière IP4 adresses.

2

Vous recherchez QRegExp et QValidator, de valider une adresse IPv4 utilise cette 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 

Exemple:

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); 

Maintenant, l'utiliser comme validateur de votre texte lineEdit:

QRegExpValidator regValidator(rx, 0); 
ui->lineEdit->setValidator(&regValidator); 

Maintenant, il suffit de lire votre entrée et le validateur va valider c'est =). Si vous voulez le faire manuellement, essayer quelque chose comme ceci:

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); 

Il y a une autre façon de l'utilisation des classes ont rendu Qt, QHostAddress et 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

Il prend également la valeur supérieure à 255 également. et nous pouvons entrer 133.133. au lieu de 4 parties. il est capable de prendre moins de 4 parties d'adresse IP. S'il vous plaît suggérer comment nous pouvons valider cette adresse IP doit contenir 4 parties avec la gamme 0-255 –

+0

Voir mes dernières modifications. Voici le meilleur que j'ai trouvé jusqu'à présent: \ 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