Я думал, что это QHostAddress, но, как ни странно, он не предоставляет методов для проверки того, является ли IP-адрес действительным (больше не поддерживается Qt3).
Кто-нибудь знает?
Существует альтернатива использованию isIpv4Address() и isIPv6Address(). Например:
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
Надеюсь, это поможет.
Вот официальный ответ инженера службы поддержки Nokia, имя удалено для защиты конфиденциальности:
Я разместил вопрос на stackoverflow.com следующим образом: Предоставляет ли Qt класс, представляющий IP-адрес? Вы можете видеть, что кто-то уже опубликовал решение моего вопроса. Однако я хочу спросить, почему Nokia не просто предоставляет метод для QHostAddress (например, isValid ()), который будет проверять адрес хоста Справедливость Спасибо за ваш запрос. Вы можете используйте метод isNull () для проверки период действия. Это вернет истину для неверные адреса: http://doc.qt.digia.com/4.6/qhostaddress.html#isNull Надеюсь, это поможет. С уважением, Инженер поддержки, Qt Development Каркасы, Nokia
Я разместил вопрос на stackoverflow.com следующим образом: Предоставляет ли Qt класс, представляющий IP-адрес? Вы можете видеть, что кто-то уже опубликовал решение моего вопроса. Однако я хочу спросить, почему Nokia не просто предоставляет метод для QHostAddress (например, isValid ()), который будет проверять адрес хоста Справедливость
Я разместил вопрос на stackoverflow.com следующим образом:
Предоставляет ли Qt класс, представляющий IP-адрес?
Вы можете видеть, что кто-то уже опубликовал решение моего вопроса.
Однако я хочу спросить, почему Nokia не просто предоставляет метод для
QHostAddress (например, isValid ()), который будет проверять адрес хоста Справедливость
Спасибо за ваш запрос. Вы можете используйте метод isNull () для проверки период действия. Это вернет истину для неверные адреса: http://doc.qt.digia.com/4.6/qhostaddress.html#isNull
С уважением,
Инженер поддержки, Qt Development Каркасы, Nokia
Возвращаемое значение bool, равное QHostAddress::setAddress(const QString &address), указывает, была ли строка успешно проанализирована как адрес IPv4 или IPv6.
bool
QHostAddress::setAddress(const QString &address)
QHostAddress addr; if (addr.setAddress(myString)) { // valid } else { // invalid }
http://doc.qt.io/qt-5/qhostaddress.html#setAddress-5
Я обнаружил, что все вышеперечисленные решения ненадежны по крайней мере для адресов IPv4. Например, когда «192» и «192.» были использованы для создания QHostAddress. И .setAddress (), и if(QAbstractSocket::IPv4Protocol == address.protocol() вернули true!
QHostAddress
if(QAbstractSocket::IPv4Protocol == address.protocol()
true
Я нашел более надежное решение - проверить формат строки IP-адреса, используя QRegularExpression и QRegularExpressionValidator.
QRegularExpression
QRegularExpressionValidator
Пример хорошего регулярного выражения IPv4 можно найти здесь
Как установить маску ввода и QValidator для QLineEdit одновременно в Qt?