QT 获取本机所有 IP 地址

news/2024/9/22 20:06:08/
获取本机所有 IP 地址,包括 IPV6的地址,需要引用 QNetworkInterface 
#include <QNetworkInterface>// 获取本机所有 IP 地址
void MainWindow::getLocalIPs() {QList<QHostAddress> ipAddressesList;QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces();foreach (QNetworkInterface interface, interfaces) {if (interface.flags() & QNetworkInterface::IsUp && !(interface.flags() & QNetworkInterface::IsLoopBack)) {QList<QNetworkAddressEntry> addressEntries = interface.addressEntries();foreach (QNetworkAddressEntry entry, addressEntries) {只获取IPV4地址if (entry.ip().protocol() == QAbstractSocket::IPv4Protocol)ipAddressesList.append(entry.ip());}}}// 输出所有 IP 地址foreach (QHostAddress address, ipAddressesList) {qDebug() << address.toString();// ui->textEdit->append(address.toString());}
}

QNetworkInterface 是 Qt 框架中用于检索和处理网络接口的类。它提供了获取本地系统中所有网络接口的信息的能力,并允许访问与这些接口相关的属性,比如IP地址、硬件地址、接口名称等。
以下是一些关于 QNetworkInterface 类的主要功能和应用场景的说明:

1.检索所有网络接口:

通过 QNetworkInterface::allInterfaces() 可以获取当前设备的所有网络接口的列表。这在构建网络工具、诊断工具或其他与网络相关的应用时很有用。

QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces();


2.获取接口的详细信息:

每个 QNetworkInterface 对象包含接口的属性,如硬件地址、接口名称、标志(如是否为环回、是否可用、是否为无线等)。

for (const QNetworkInterface &interface : interfaces) {
    QString name = interface.name(); // 接口名称
    QString hardwareAddress = interface.hardwareAddress(); // MAC 地址
    QFlags<QNetworkInterface::InterfaceFlag> flags = interface.flags(); // 接口标志
}


3.获取接口的 IP 地址:

你可以通过 QNetworkInterface::allAddresses() 获取与特定接口关联的所有 IP 地址。这些地址可能是 IPv4 或 IPv6。

QList<QHostAddress> addresses = interface.allAddresses();
for (const QHostAddress &address : addresses) {
    if (address.protocol() == QAbstractSocket::IPv4Protocol) {
        qDebug() << "IPv4 address:" << address.toString();
    } else if (address.protocol() == QAbstractSocket::IPv6Protocol) {
        qDebug() << "IPv6 address:" << address.toString();
    }
}


4.用于网络诊断和监控:

QNetworkInterface 可以帮助构建用于诊断和监控网络状态的工具。例如,查看设备上所有网络接口的状态、检测网络连接问题、获取接口相关信息等。


http://www.ppmy.cn/news/1450955.html

相关文章

Vue监测数组改变的原理

Vue监测数组改变的原理是通过重写数组的方法&#xff08;如push、pop、shift等&#xff09;来实现的。具体的实现步骤如下&#xff1a; 准备一个原始的数组&#xff0c;用于存储数据。 使用Object.defineProperty方法&#xff0c;给数组对象添加一个名为__ob__的属性&#xff…

记一次使用Notepad++正则表达式批量替换SQL语句

目录 一、需求二、解决方案三、正则解析 一、需求 存在如下SQL建表脚本&#xff1a; CREATE TABLE "BUSINESS_GOODS" ( "ID" VARCHAR(32) NOT NULL, "GOODS_CODE" VARCHAR(50), "GOODS_NAME" VARCHAR(100), ... NOT CLUSTER PRIMARY…

HTML 标签通用属性

HTML 标签通用属性 通用HTML标签的属性 id 设定标签的ID name 设定标签的名称 class 设定标签样式的类选择器 style 设定标签样式属性 <basefont><font>标签通用的属性 face 用于文字的名称&#xff0c;可以是宋体、隶书、楷体等 size 用于设置字号的大小(从…

Android BINDER是干嘛的?

1.系统架构 2.binder 源码位置&#xff1a; 与LINUX传统IPC对比

20240503安装HEVC解码器播放H265格式的8K视频

20240503安装HEVC解码器播放H265格式的8K视频 2024/5/3 9:55 缘起&#xff1a;由于youtube支持8K视频了&#xff0c;想尝尝鲜&#xff01; 主摄像头当然是选择SONY的【夜摄/弱光场景】&#xff0c;根据优选&#xff0c;小米&#xff08;MI&#xff09;13Ultra 最佳了。 在开始播…

anaconda的安装和Jupyter Notebook修改默认路径

anaconda的安装 就一个注意事项:在结尾时候记得配置系统环境变量 要是没有配置这个环境变量,后面就不能cmd启动Jupyter Notebook Jupyter Notebook修改默认路径 我们要找到Jupyter Notebook的配置文件 输入下面指令 jupyter notebook --generate-config就可以找到存放配置文…

李沐72_深度学习优化算法——自学笔记

局部最小VS全局最小 使用迭代优化算法求解&#xff0c;一般只能保证找到局部最小值。 凸函数优化 1.如果代价函数f是凸&#xff0c;且限制集合C是凸&#xff0c;那么就是凸优化问题&#xff0c;局部最小一定是全局最小 2.严格凸优化问题有唯一的全局最小 凸 1.线性回归 …

YOLOv5改进(一)MobileNetv3替换主干网络

前言 本篇博客主要讲解YOLOv5主干网络的替换&#xff0c;使用MobileNetv3实现模型轻量化&#xff0c;平衡速度和精度。以下为改进的具体流程~ 目录 一、改进MobileNetV3_Small 第一步&#xff1a;修改common.py,新增MobileNetV3 第二步&#xff1a;在yolo.py的parse_model函…