本人在开发Qt应用程序时,需要在应用程序中显示运行设备的本机IP地址,本来考虑解析运行设备的网络配置文件来获取IP地址,后来查阅文档后,发现Qt的网络编程模块中QHostAddress类 可以很方便解决这个问题,记录一下。
本人实现方法如下:
QList<QHostAddress> ipAddressesList = QNetworkInterface::allAddresses();
// use the first non-localhost IPv4 address
for (int i = 0; i < ipAddressesList.size(); ++i) {
if (ipAddressesList.at(i) != QHostAddress::LocalHost &&
ipAddressesList.at(i).toIPv4Address()) {
mIpAddress = ipAddressesList.at(i).toString();
break;
}
}
// if we did not find one, use IPv4 localhost
if (mIpAddress.isEmpty())
mIpAddress = QHostAddress(QHostAddress::LocalHost).toString();
return mIpAddress; //获取本机正在使用的IP地址
简单介绍QHostAddress类
简述
QHostAddress类提供一个IP地址。
这个类提供一种独立于平台和协议的方式来保存IPv4和IPv6地址。
QHostAddress通常与QTcpSocket、QTcpServer、QUdpSocket一起使用,来连接到主机或建立一个服务器。
可以通过setAddress()来设置一个主机地址,使用toIPv4Address()、toIPv6Address()或toString()来检索主机地址。你可以通过protocol()来检查协议类型。
注意: QHostAddress不做DNS查询,而QHostInfo是有必要的。
这个类还支持通用的预定义地址:Null、LocalHost、LocalHostIPv6、Broadcast和Any。
常用接口
枚举 QHostAddress::SpecialAddress:
常量 | 值 | 描述 |
---|---|---|
QHostAddress::Null | 0 | 空地址对象,相当于QHostAddress()。 |
QHostAddress::LocalHost | 2 | IPv4本地主机地址,相当于QHostAddress(“127.0.0.1”)。 |
QHostAddress::LocalHostIPv6 | 3 | IPv6本地主机地址,相当于 QHostAddress(“::1”)。 |
QHostAddress::Broadcast | 1 | Pv4广播地址,相当于QHostAddress(“255.255.255.255”)。 |
QHostAddress::AnyIPv4 | 6 | IPv4 any-address,相当于QHostAddress(“0.0.0.0”)。与该地址绑定的socket将只监听IPv4接口。 |
QHostAddress::AnyIPv6 | 5 | IPv6 any-address,相当于QHostAddress(“::”)。与该地址绑定的socket将只监听IPv4接口。 |
QHostAddress::Any | 4 | 双any-address栈,与 |