首先,添加模块Network,如下图
其中,获取本地IP 的方法有两种如下
#include <QHostAddress>
#include <QNetworkInterface>
QString getLocalIP()
{
QString localIP;
QList<QHostAddress> addresses = QNetworkInterface::allAddresses();
for(auto address : addresses)
{
if (address.protocol() == QAbstractSocket::IPv4Protocol && address != QHostAddress::Null && address != QHostAddress::LocalHost)
{// 如果需要获取IPv6则需要将QAbstractSocket::IPv4Protocol换成QAbstractSocket::IPv6Protocol
localIP = address.toString();
break;
}
}
return localIP;
}
另一种方式为:
#include <QHostAddress>
#include <QNetworkInterface>
QString getLocalIP()
{
QString localIP;
QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces();
for(auto it : interfaces)
{
if (it.flags().testFlag(QNetworkInterface::IsUp) && !it.flags().testFlag(QNetworkInterface::IsLoopBack))
{
QList<QNetworkAddressEntry> entries = it.addressEntries();
for(auto entry : entries)
{
if (entry.ip().protocol() == QAbstractSocket::IPv4Protocol)
{// 如果需要获取IPv6则需要将QAbstractSocket::IPv4Protocol换成QAbstractSocket::IPv6Protocol
localIP = entry.ip().toString();
break;
}
}
}
if (!localIP.isEmpty())
break;
}
return localIP;
}
这两种方法都是通过遍历所有网络接口,并寻找具有IPv4地址的非回环接口来获得本地IP地址。