Qt是否提供了一个表示IP地址的类?
我以为QHostAddress就是它,但奇怪的是它没有提供验证IP地址是否有效的方法(现在,QHostAddress被弃用为Qt3)Qt是否提供了一个表示IP地址的类?,qt,Qt,我以为QHostAddress就是它,但奇怪的是它没有提供验证IP地址是否有效的方法(现在,QHostAddress被弃用为Qt3) 有人知道吗?除了使用isIpv4Address()和isIPv6Address()之外,还有一种替代方法。例如: QHostAddress address(myString); if (QAbstractSocket::IPv4Protocol == address.protocol()) { qDebug("Valid IPv4 address."); }
有人知道吗?除了使用
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.");
}
另见:
希望这能有所帮助。以下是诺基亚支持工程师的官方答案,为保护隐私删除了该名称: 我在stackoverflow.com上发布了如下问题: 你可以看到有人已经发布了我问题的解决方案 然而,我想问,为什么诺基亚不只是提供一种 QHostAddress(如isValid())将检查主机地址的 有效期 谢谢你的询问。你可以 使用isNull()方法检查 有效性它将返回真实的时间 无效地址: 希望这有帮助 问候, 支持工程师,Qt开发 框架,诺基亚
QHostAddress::setAddress(const QString&address)
的bool
返回值告诉您字符串是否成功解析为IPv4或IPv6地址
QHostAddress addr;
if (addr.setAddress(myString)) {
// valid
} else {
// invalid
}
我发现上述所有解决方案至少对于IPv4地址都不可靠。例如,使用“192”和“192.”创建
QHostAddress
。.setAddress()和if(QAbstractSocket::IPv4Protocol==address.protocol()
都返回了true
我发现一个更可靠的解决方案是使用QRegularExpression
和QRegularExpressionValidator
检查IP地址字符串格式
这里可以找到一个好的IPv4正则表达式示例
正如Harsha Biyani提到的,函数parseIp4Internal中有一个bug, (qtbase\src\corelib\io\qipaddress.cpp)。 IPv4地址解析不正确。 QHostAddress使用该函数解析IPv4地址 UPD。
像“1”、“1.1”这样的地址被认为是正确的地址,分别相当于“0.0.0.1”和“1.0.0.1”。当你说“验证IP地址是否有效的方法”时,你指的是
isIPv4Address()
和isIPv6Address()
方法还是其他什么?@RA,是的,你是对的。基本上,我只是想要一个接受QString的类,并告诉我QString是否是一个有效的IP地址。我以为QHostAddress就是那个,但可能不是。我相信isIPv4Address()和isIPv6Address()现在被弃用,因为它被分组在QT_3(?)我也有同样的问题,但这些答案并没有解决我的问题。例如:QHostAddress ip(“1.2”);ip.isNull();//始终为真(我想在这里为假)。对我来说已经足够好了。谢谢!奇怪的是,诺基亚不只是将此作为QHostAddress中的一种方法。我会向他们提出问题。