8
votes

QT fournit-il une classe qui représente une adresse IP?

Je pensais que Qhostaddress était-ce, mais il ne fournit pas étrangement à valider si l'adresse IP est valide ou non (plus, a été obsolète à Qt3).

Est-ce que quelqu'un sait?

qt

4 commentaires

Lorsque vous dites "Les méthodes de validation de l'adresse IP ou non sont valides ou non", parlez-vous du isipv4Address () et iIPV6Address () méthodes ou autre chose?


@Ra, oui tu es correct. Fondamentalement, je voulais juste une classe qui prendrait Qstring et me dit si le QString est une adresse IP valide. Je pensais que Qhostaddress était celui-là, mais probablement pas.


Je crois que IIPV4Address () et isipv6Address () sont maintenant obsolètes car il est regroupé sous qt_3 (?)


J'ai le même problème, mais ces réponses n'ont pas résolu les miens. Ex: qhostaddress IP ("1.2"); ip.isnull (); // toujours vrai (je veux faux ici).


5 Réponses :


7
votes

Il existe une alternative à l'utilisation de isipv4Address () et isipv6Address () . Par exemple: xxx

Voir aussi:

http://doc.qt.digia.com/4.6/qhostaddress.html#protocol

J'espère que cela aide.


2 commentaires

Suffisant pour moi. Merci!


Etrange Comment Nokia ne fait pas seulement de faire celle-ci des méthodes de Qhostadddress. Je vais mettre un billet pour leur demander.



7
votes

Voici la réponse officielle de Nokia Support Ingénieur, nom supprimé pour la protection de la vie privée:

J'ai posté une question sur Stackoverflow.com comme suit:

Qt fournir une classe qui représente une adresse IP Adresse?

Vous pouvez voir que quelqu'un a déjà posté une solution à ma question.

Cependant, je veux demander comment se rapporter Nokia ne propose pas simplement une méthode à

qhostaddress (comme Isvalid ()) qui vérifiera l'adresse hôte Validité?

Merci pour votre demande. Tu peux Utilisez la méthode ISNULL () pour vérifier le validité. Il retournera vrai pour Adresses non valides: http://doc.qt.digia.com/4.6/qhostadddress.html# isnull

J'espère que cela aide.

Cordialement,

Ingénieur de support, Développement QT Cadres, Nokia


0 commentaires

3
votes

Le BOOL code> Valeur de retour de qhostaddress :: settaddress (const qstring & adresse) code> indique si la chaîne est analysée avec succès d'une adresse IPv4 ou IPv6.

QHostAddress addr;
if (addr.setAddress(myString)) {
    // valid
} else {
    // invalid
}


0 commentaires

1
votes

J'ai trouvé toutes les solutions ci-dessus pour être peu fiables pour les adresses IPv4 au moins. Par exemple, quand '192' et '192.' ont été utilisés pour créer un qhostaddress . Les deux .SetAddress () et si (qabstractsocket :: ipv4protocol == adresse.protocol () retourné true !

J'ai trouvé une solution plus robuste consiste à vérifier le format de chaîne d'adresse IP à l'aide de qregularexpression et qregularexpressionvalidator . .

Un exemple d'une bonne expression régulière IPv4 peut être trouvé ici

Comment définir le masque d'entrée et qvalidator sur un QLineDit à la fois dans QT?


0 commentaires

0
votes

As Harsha Biyani mentionné, il y a un bogue en fonction PARSIP4Internal, (qtBase \ src \ corelib \ io \ qipaddress.cpp). L'analyse d'adresse IPv4 n'est pas correcte. Qhostaddress utilise cette fonction pour résoudre les adresses IPv4.

upd. Les adresses telles que "1", "1.1" sont considérées comme des adresses correctes et sont équivalentes à "0.0.0.1" et "1.0.0.1" respectivement.


0 commentaires