QNetworkAddressEntry 封裝網絡接口上的單個 IP 地址及其關聯的子網掩碼和廣播地址。每個 QNetworkInterface 可包含多個此類條目(如一張網卡配置多個 IP)。
| 函數 | 返回類型 | 說明 |
|---|---|---|
| ip() | QHostAddress | IP 地址(IPv4/IPv6) |
| netmask() | QHostAddress | 子網掩碼,用於劃分網絡/主機位 |
| broadcast() | QHostAddress | 廣播地址,發送到同一子網所有主機 |
auto interfaces = QNetworkInterface::allInterfaces();
for (const auto &iface : interfaces) {
qDebug() << "Interface:" << iface.name();
for (const auto &entry : iface.addressEntries()) {
qDebug() << " IP:" << entry.ip().toString();
qDebug() << " Netmask:" << entry.netmask().toString();
qDebug() << " Broadcast:" << entry.broadcast().toString();
}
}
利用 IP 與掩碼按位與運算得網絡地址,與反掩碼或運算得廣播地址(Qt 已在 broadcast() 提供)。
QHostAddress ip = entry.ip();
QHostAddress mask = entry.netmask();
QHostAddress network(ip.toIPv4Address() & mask.toIPv4Address()); // 僅 IPv4 示例
qDebug() << "Network:" << network.toString();
bool sameSubnet(const QHostAddress &a, const QHostAddress &b, const QHostAddress &mask) {
return (a.toIPv4Address() & mask.toIPv4Address()) == (b.toIPv4Address() & mask.toIPv4Address());
}
broadcast() 可能返回空或鏈路本地全節點多播 (ff02::1)。netmask() 返回對應掩碼地址。QHostAddress::scopeId() 獲取。QNetworkAddressEntry 是 Qt 網絡層解析 IP 配置詳情的關鍵類,配合 QNetworkInterface::addressEntries() 可獲取完整的接口地址拓撲。掌握其三大核心屬性及 IPv4/IPv6 差異,能輕鬆實現子網判斷、網段掃描、廣播發送等網絡工程常見功能。