优化代码 QString hostName=QHostInfo::localHostName();//本地主机名 QHostInfo hostInfo=QHostInfo::fromName(hostName); QString localIP=""; QStringList ipList; QList<QHostAddress> addList=hostInfo.addresses(); qDebug()<<"hostInfo"<<addList; for (int i=0;i<addList.count();i++) { QHostAddress aHost=addList.at(i); if (QAbstractSocket::IPv4Protocol==aHost.protocol()) { localIP=aHost.toString(); ipList.append(localIP); } } return ipList;
时间: 2024-03-19 18:44:35 浏览: 116
可以考虑使用 `QNetworkInterface` 类来获取本地 IP 地址,避免使用 `QHostInfo` 类的过程中产生的不必要的内存分配和拷贝。具体的实现方法如下:
```c++
QStringList getLocalIpAddresses() {
QStringList ipList;
QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces();
foreach (QNetworkInterface iface, interfaces) {
if (iface.flags().testFlag(QNetworkInterface::IsUp) && !iface.flags().testFlag(QNetworkInterface::IsLoopBack)) {
QList<QNetworkAddressEntry> entries = iface.addressEntries();
foreach (QNetworkAddressEntry entry, entries) {
if (entry.ip().protocol() == QAbstractSocket::IPv4Protocol) {
ipList.append(entry.ip().toString());
}
}
}
}
return ipList;
}
```
使用 `QNetworkInterface::allInterfaces()` 获取所有的网络接口信息,然后遍历每个网络接口,判断是否处于运行状态并且不是回环接口,如果是,则遍历该网络接口的所有 IP 地址,将 IPv4 地址添加到列表中。这样可以避免不必要的内存分配和拷贝,并且可以获取到所有的 IPv4 地址。
阅读全文