当前位置: 首页 > news >正文

Qt获取当前系统网络接口信息

1.QInterface获取网络接口信息
void NetProperty::init()
{// 获取所有网络接口const QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces();ui->com_Interface->clear();for(const QNetworkInterface& interface : interfaces){ui->com_Interface->addItem(interface.humanReadableName(), interface.name());       // 显示所有网络接口名称}
}void NetProperty::on_com_Interface_activated(int index)
{Q_UNUSED(index)QString strName = ui->com_Interface->currentData().toString();QNetworkInterface interface =  QNetworkInterface::interfaceFromName(strName);   // 根据选择名称获取网卡if(!interface.isValid())   // 判断接口有效return;ui->tableWidget->item(0, 1)->setText(QString::number(interface.index()));                     // 获取网卡索引
#if (QT_VERSION >= QT_VERSION_CHECK(5,11,0))        // qt5.11以后版本才有ui->tableWidget->item(1, 1)->setText(QString::number(interface.maximumTransmissionUnit()));   // 获取网卡最大传输数据单元
#endifui->tableWidget->item(2, 1)->setText(interface.name());                                       // 获取网卡名称#if 0    // 直接显示标志枚举QNetworkInterface::InterfaceFlags flags = interface.flags();QMetaEnum metaEnum = QMetaEnum::fromType<QNetworkInterface::InterfaceFlags>();ui->tableWidget->item(3, 1)->setText(metaEnum.valueToKeys(flags));                            // 返回与此网络接口关联的标志
#elseui->tableWidget->item(3, 1)->setText(FlagsToQString(interface.flags()));
#endif
#if (QT_VERSION >= QT_VERSION_CHECK(5,11,0))        // qt5.11以后版本才有ui->tableWidget->item(4, 1)->setText(TypeToQString(interface.type()));                        // 获取网络类型说明
#endifui->tableWidget->item(5, 1)->setText(interface.hardwareAddress());                            // // 获取MAC地址ui->textEdit_ip->clear();// 如果只是获取所有的IP地址可以使用allAddresses()函数const QList<QNetworkAddressEntry> entrys = interface.addressEntries();  // 返回此接口拥有的 IP 地址列表及其关联的网络掩码和广播地址。for(auto entery : entrys){QString strType;switch (entery.ip().protocol())       // 判断IP地址类型{case QAbstractSocket::IPv4Protocol:strType = "--------IPv4地址--------";break;case QAbstractSocket::IPv6Protocol:strType = "--------IPv6地址--------";break;case QAbstractSocket::AnyIPProtocol:strType = "--------IPv4或IPv6地址--------";break;case QAbstractSocket::UnknownNetworkLayerProtocol:strType = "--------未知地址--------";break;}ui->textEdit_ip->append(strType);             // 显示IP地址类型QString ipInfo = QString("IP地址:%1,子网掩码:%2,广播地址:%3").arg(entery.ip().toString()).arg(entery.netmask().toString()).arg(entery.broadcast().toString());ui->textEdit_ip->append(ipInfo);              // 显示IP地址信息}
}/*** @brief        将网卡关联标志转换为可读的说明信息* @param flags* @return*/
QString NetProperty::FlagsToQString(int flags)
{QString strFlags;if(flags & QNetworkInterface::IsUp){strFlags += "网络接口处于活动状态";}if(flags & QNetworkInterface::IsRunning){strFlags.append(strFlags.isEmpty() ? "" : " | ");strFlags += "网络接口已分配资源";}if(flags & QNetworkInterface::CanBroadcast){strFlags.append(strFlags.isEmpty() ? "" : " | ");strFlags += "网络接口工作在广播模式";}if(flags & QNetworkInterface::IsLoopBack){strFlags.append(strFlags.isEmpty() ? "" : " | ");strFlags += "网络接口是一个环回接口";}if(flags & QNetworkInterface::IsPointToPoint){strFlags.append(strFlags.isEmpty() ? "" : " | ");strFlags += "网络接口是一个点对点接口";}if(flags & QNetworkInterface::CanMulticast){strFlags.append(strFlags.isEmpty() ? "" : " | ");strFlags += "网络接口支持组播";}return strFlags;
}/*** @brief        返回网卡类型说明* @param type   网卡类型枚举* @return       网卡类型说明*/
QString NetProperty::TypeToQString(int type)
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,11,0))        // qt5.11以后版本才有switch (type){case QNetworkInterface::Loopback: return "虚拟环回接口,分配了环回 IP 地址 (127.0.0.1, ::1)";case QNetworkInterface::Virtual:  return "一种确定为虚拟的接口类型,但不是任何其他可能的类型";case QNetworkInterface::Ethernet: return "IEEE 802.3 以太网接口";case QNetworkInterface::Slip:     return "串行线路互联网协议接口";case QNetworkInterface::CanBus:   return "ISO 11898 控制器局域网总线接口";case QNetworkInterface::Ppp:      return "点对点协议接口,通过较低的传输层(通常通过无线电或物理线路串行)在两个节点之间建立直接连接";case QNetworkInterface::Fddi:     return "ANSI X3T12 光纤分布式数据接口,一种光纤局域网";case QNetworkInterface::Wifi:     return "IEEE 802.11 Wi-Fi 接口";         // 别名 Ieee80211case QNetworkInterface::Phonet:   return "使用 Linux Phonet socket系列的接口,用于与蜂窝调制解调器通信";case QNetworkInterface::Ieee802154: return "IEEE 802.15.4 个人区域网络接口,6LoWPAN 除外";case QNetworkInterface::SixLoWPAN:  return "6LoWPAN(低功耗无线个人区域网络上的 IPv6)接口,通常用于网状网络";case QNetworkInterface::Ieee80216:  return "IEEE 802.16 无线城域网";case QNetworkInterface::Ieee1394:   return "IEEE 1394 接口(又名“FireWire”)";case QNetworkInterface::Unknown:    return "接口类型无法确定或不是其他列出的类型之一";default:return "未知";}
#elseQ_UNUSED(type)
#endif
}
2.QHostInfo获取网络接口信息

QHostInfo类用于获取主机的一些网络信息。QHostInfo类有下面这些公有函数:

  • [static] QString QHostInfo::localHostName(),函数获取本机主机名。
  • [static] QHostInfo QHostInfo::fromName(const QString &name),函数根据主机名获取主机的信息。
  • [static] QString QHostInfo::localDomainName(),函数返回本机DNS域名。
  • [static] int QHostInfo::lookupHost(const QString &name, QObject receiver, const char member),以异步方式查找主机的IP地址,并返回一个表示本次查找的ID。name参数表示主机名,可以为主机名、域名或IP地址。参数receiver指定槽函数的接收者,member指定槽函数的名称。异步方式表示执行lookupHost后,程序可能需要花一定时间用来查找,但不阻塞程序的继续执行(类似多线程),查找完毕后,通过信号通知设定的槽函数,在槽函数里读取查找的结果。
#include <QHostInfo>
QString hostName = QHostInfo::localHostName();//获取本机主机名
QHostInfo hostInfo = QHostInfo::fromName(hostName);//获取本机信息
QList<QHostAddress> addList=hostInfo.addresses();//获取IP地址列表
if (!addList.isEmpty())for(int i=0;i<addList.count();i++){QHostAddress aHost=addList.at(i); //每一项是一个QHostAddressQAbstractSocket::NetworkLayerProtocol protocol = aHost.protocol();//返回协议类型QString protocolType;switch(protocol){case QAbstractSocket::IPv4Protocol:protocolType = "IPv4 Protocol";break;case QAbstractSocket::IPv6Protocol:protocolType = "IPv6 Protocol";break;case QAbstractSocket::AnyIPProtocol:protocolType = "Any IP Protocol";default:protocolType = "Unknown Network Layer Protocol";}QString IPAddress = aHost.toString();//返回IP地址的字符串}

lookupHost()函数使用:

//用lookupHost根据主机名、域名或IP地址查找主机相关信息
QString hostname=ui->editHost->text(); //获取主机名
//查找主机名为hostname的主机信息,查找完毕后执行this对象的槽函数lookedUpHostInfo(QHostInfo)
QHostInfo::lookupHost(hostname,this,SLOT(lookedUpHostInfo(QHostInfo)));//槽函数部分代码
void Dialog::lookedUpHostInfo(const QHostInfo &host){QList<QHostAddress> addList=host.addresses();//获取IP地址列表
}

相关文章:

Qt获取当前系统网络接口信息

1.QInterface获取网络接口信息 void NetProperty::init() {// 获取所有网络接口const QList<QNetworkInterface> interfaces QNetworkInterface::allInterfaces();ui->com_Interface->clear();for(const QNetworkInterface& interface : interfaces){ui->…...

【C++】STL 算法 ④ ( 函数对象与谓词 | 一元函数对象 | “ 谓词 “ 概念 | 一元谓词 | find_if 查找算法 | 一元谓词示例 )

文章目录 一、函数对象与谓词1、一元函数对象2、" 谓词 " 概念3、find_if 查找算法 二、一元谓词示例1、代码示例 - 一元谓词示例2、执行结果 一、函数对象与谓词 1、一元函数对象 " 函数对象 " 是通过 重载 函数调用操作符 () 实现的 operator() , 函数对…...

C++ 并发编程 | 并发世界

一、C 并发世界 1、什么是并发&#xff1f; 并发是指两个或更多独立的活动同时发生&#xff0c;计算机中的并发指的是&#xff0c;在单个系统里同时执行多个独立的活动...

GitHub注册新账号的操作流程(详细)

目录 第一步 进入官网&#xff0c;点击右上角的"Sign up" 第二步 输入email地址 第三步 设置密码 第四步 输入昵称 第五步 根据个人喜好决定要不要接收GitHub的邮件推送。然后回答他们的验证问题 第六步 输入验证码 我在注册github账号时遇到过一些阻碍&#x…...

Kali安装Xrdp结合内网穿透实现无公网ip远程访问系统桌面

文章目录 前言1. Kali 安装Xrdp2. 本地远程Kali桌面3. Kali 安装Cpolar 内网穿透4. 配置公网远程地址5. 公网远程Kali桌面连接6. 固定连接公网地址7. 固定地址连接测试 前言 Kali远程桌面的好处在于&#xff0c;它允许用户从远程位置访问Kali系统&#xff0c;而无需直接物理访…...

【WEB API自动化测试】接口文档与在线测试

这一篇我们主要介绍如何做API帮助文档&#xff0c;给API的调用人员介绍各个 API的功能, 输入参数&#xff0c;输出参数, 以及在线测试 API功能(这个也是方便我们自己开发调试) 我们先来看看我们的API最终帮助文档及在线测试最终达到的效果: 概要图 GET API 添加产品API: 删除…...

【深度学习每日小知识】Training Data 训练数据

训练数据是机器学习的基本组成部分&#xff0c;在模型的开发和性能中起着至关重要的作用。它是指用于训练机器学习算法的标记或注释数据集。以下是与训练数据相关的一些关键方面和注意事项。 Quantity 数量 训练数据的数量很重要&#xff0c;因为它会影响模型的泛化能力。通常…...

[acm算法学习] 后缀数组SA

学习自B站up主 kouylan 定义 后缀是包含最后个字母的子串 把字符串 str 的所有后缀按字典排序&#xff0c;sa[i]表示排名为 i 的后缀的开头下标 如何求解SA 倍增的方法 先把每个位置开始的长度为1的子串排序&#xff0c;在此基础上再把长度为2的子串排序&#xff08;长度…...

DNS解析和它的三个实验

一、DNS介绍 DNS&#xff1a;domain name server 7层协议 名称解析协议 tcp /53 主从之间的同步 udp/53 名字解析 DNS作用&#xff1a;将域名转换成IP地址的协议 1.1DNS的两种实现方式 1.通过hosts文件&#xff08;优先级最高&#xff09; 分散的管理 linux /etc/hos…...

[redis] redis的安装,配置与简单操作

一、缓存的相关知识 1.1 缓存的概念 缓存是为了调节速度不一致的两个或多个不同的物质的速度&#xff0c;在中间对速度较慢的一方起到加速作用&#xff0c;比如CPU的一级、二级缓存是保存了CPU最近经常访问的数据&#xff0c;内存是保存CPU经常访问硬盘的数据&#xff0c;而且…...

C++ STL set容器

和 map、multimap 容器不同&#xff0c;使用 set 容器存储的各个键值对&#xff0c;要求键 key 和值 value 必须相等。 举个例子&#xff0c;如下有 2 组键值对数据&#xff1a; {<a, 1>, <b, 2>, <c, 3>} {<a, a>, <b, b>, <c, c>} 显然&…...

专业课148,总分410+电子科技大学858信号与系统考研经验电子信息与通信

今年专业课148分&#xff0c;总分410顺利被电子科技大学录取&#xff0c;回望这一年复习还有很多不足&#xff0c;总结一下自己的复习经历&#xff0c;希望对大家复习有所帮助。 数学&#xff1a;&#xff08;多动手&#xff0c;多计算&#xff0c;多总结&#xff0c;打好基础…...

密码学:一文读懂非对称加密算法 DH、RSA

文章目录 前言非对称加密算法的由来非对称加密算法的家谱1.基于因子分解难题2.基于离散对数难题 密钥交换算法-DH密钥交换算法-DH的通信模型初始化DH算法密钥对甲方构建DH算法本地密钥乙方构建DH算法本地密钥DH算法加密消息传递 典型非对称加密算法-RSARSA的通信模型RSA特有的的…...

ZooKeeper 实战(二) 命令行操作篇

文章目录 ZooKeeper 实战(二) 命令行操作篇1. 服务端命令1.1. 服务启动1.2. 查看服务1.3. 重启服务1.4. 停止服务 2. 客户端命令2.1. 启动客户端2.2. 查看节点信息查看根节点详情 ls -s /添加一个watch监视器 ls -w /列举出节点的级联节点 ls -R / 2.3. 查看节点状态2.4. 创建节…...

关于在前台应用路由调用子应用

需求 在实际写项目的过程中&#xff0c;关于一些前台的官网首页&#xff0c;会需要在一写特定的路由侠调用子应用的需求&#xff0c;在编写的过程中在公用的方法中&#xff0c;来进行处理&#xff0c;处理思想如下&#xff0c;在特定的.vue文件中&#xff0c; 后端 通过后端…...

Spring学习 Spring事务控制

7.1.事务介绍 7.1.1.什么是事务&#xff1f; 当你需要一次执行多条SQL语句时&#xff0c;可以使用事务。通俗一点说&#xff0c;如果这几条SQL语句全部执行成功&#xff0c;则才对数据库进行一次更新&#xff0c;如果有一条SQL语句执行失败&#xff0c;则这几条SQL语句全部不…...

c++一些使用频率较高的库函数

目录 memset&#xff08;&#xff09; memset&#xff08;&#xff09;接受三个参数&#xff1a; 注意 swap&#xff08;&#xff09; reverse&#xff08;&#xff09; reverse函数接收两个参数&#xff1a; reverse&#xff08;&#xff09;反转整形向量元素顺序示例 …...

【从零开始学技术】Fiddler 抓取 https 请求大全

1.Fiddler代理浏览器设置 注意浏览器代理区别 Chrome/IE浏览器使用的都是系统代理设置 在chrome浏览器的设置中搜索代理&#xff0c;可以看到 打开IE浏览器&#xff0c;选择设置->Internet选项 Firefox浏览器使用的是单独的一套代理系统 在Firefox的代理设置中&#xff0c;我…...

第二百六十四回

文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了SliverPadding组件相关的内容&#xff0c;本章回中将介绍Sliver综合示例.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们在前面的章回中介绍了各种Sliver相关的组件&#xff1a;SliverList,SliverGr…...

用Kimi chat识别并整理图片里面的文字

Kimi chat是有OCR功能的&#xff0c;可以识别图片中的文字。 下面这张图片是一本书的注释&#xff0c;里面提到有不少图书&#xff0c;利用Kimi chat就可以轻松完成提取其中图书书名的任务。 先拿一张图片来做实验。Kimichat的回复&#xff1a; 在您提供的文件内容中&#xf…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...