在 Qt5 中,QNetworkInterface 和 QHostInfo 提供了豐富的 API 獲取本機網絡配置。本文匯總常用信息的獲取方法,代碼可直接用於項目中。
QString getLocalMachineName() {
return QHostInfo::localHostName();
}
QString getLocalMachineIP() {
QString ipAddress;
const QList addresses = QNetworkInterface::allAddresses();
for (const QHostAddress &addr : addresses) {
if (addr != QHostAddress::LocalHost && addr.protocol() == QAbstractSocket::IPv4Protocol) {
ipAddress = addr.toString();
break;
}
}
// 兜底:未找到則使用 IPv4 回環地址
if (ipAddress.isEmpty()) {
ipAddress = QHostAddress(QHostAddress::LocalHost).toString();
}
return ipAddress;
}
void printNetworkInterfaces() {
const QList interfaces = QNetworkInterface::allInterfaces();
for (const QNetworkInterface &ni : interfaces) {
qDebug() << "Interface:" << ni.name()
<< "MAC:" << ni.hardwareAddress()
<< "HumanName:" << ni.humanReadableName();
}
}
需遍歷每個接口的地址條目(QNetworkAddressEntry):
void printIPDetails(const QNetworkInterface &interface) {
const QList entries = interface.addressEntries();
for (const QNetworkAddressEntry &entry : entries) {
qDebug() << "IP:" << entry.ip().toString()
<< "Netmask:" << entry.netmask().toString()
<< "Broadcast:" << entry.broadcast().toString();
}
}
// 組合調用示例
void dumpAllNetworkInfo() {
const QList interfaces = QNetworkInterface::allInterfaces();
for (const QNetworkInterface &ni : interfaces) {
qDebug() << "\n=== Interface:" << ni.name() << "===";
printIPDetails(ni);
}
}
QHostInfo:靜態方法獲取主機名、異步查詢主機地址。QNetworkInterface:枚舉所有網絡接口,提供名稱、MAC、IP 條目列表。QNetworkAddressEntry:封裝單個 IP 地址條目,包含 IP、子網掩碼、廣播地址。將上述函數封裝為工具類,即可在項目中輕松獲取完整網絡拓撲信息。