Предоставляет ли Qt класс, представляющий IP-адрес? - PullRequest
8 голосов
/ 11 февраля 2010

Я думал, что это QHostAddress, но, как ни странно, он не предоставляет методов для проверки того, является ли IP-адрес действительным (больше не поддерживается Qt3).

Кто-нибудь знает?

Ответы [ 4 ]

7 голосов
/ 11 февраля 2010

Существует альтернатива использованию isIpv4Address() и isIPv6Address(). Например:

QHostAddress address(myString);
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.");
}

Смотри также:

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

Надеюсь, это поможет.

6 голосов
/ 12 февраля 2010

Вот официальный ответ инженера службы поддержки Nokia, имя удалено для защиты конфиденциальности:

Я разместил вопрос на stackoverflow.com следующим образом:

Предоставляет ли Qt класс, представляющий IP-адрес?

Вы можете видеть, что кто-то уже опубликовал решение моего вопроса.

Однако я хочу спросить, почему Nokia не просто предоставляет метод для

QHostAddress (например, isValid ()), который будет проверять адрес хоста Справедливость

Спасибо за ваш запрос. Вы можете используйте метод isNull () для проверки период действия. Это вернет истину для неверные адреса: http://doc.qt.digia.com/4.6/qhostaddress.html#isNull

Надеюсь, это поможет.

С уважением,

Инженер поддержки, Qt Development Каркасы, Nokia

1 голос
/ 05 февраля 2017

Возвращаемое значение bool, равное QHostAddress::setAddress(const QString &address), указывает, была ли строка успешно проанализирована как адрес IPv4 или IPv6.

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

http://doc.qt.io/qt-5/qhostaddress.html#setAddress-5

0 голосов
/ 18 февраля 2019

Я обнаружил, что все вышеперечисленные решения ненадежны по крайней мере для адресов IPv4. Например, когда «192» и «192.» были использованы для создания QHostAddress. И .setAddress (), и if(QAbstractSocket::IPv4Protocol == address.protocol() вернули true!

Я нашел более надежное решение - проверить формат строки IP-адреса, используя QRegularExpression и QRegularExpressionValidator.

Пример хорошего регулярного выражения IPv4 можно найти здесь

Как установить маску ввода и QValidator для QLineEdit одновременно в Qt?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...