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、什么是并发? 并发是指两个或更多独立的活动同时发生,计算机中的并发指的是,在单个系统里同时执行多个独立的活动...
GitHub注册新账号的操作流程(详细)
目录 第一步 进入官网,点击右上角的"Sign up" 第二步 输入email地址 第三步 设置密码 第四步 输入昵称 第五步 根据个人喜好决定要不要接收GitHub的邮件推送。然后回答他们的验证问题 第六步 输入验证码 我在注册github账号时遇到过一些阻碍&#x…...
Kali安装Xrdp结合内网穿透实现无公网ip远程访问系统桌面
文章目录 前言1. Kali 安装Xrdp2. 本地远程Kali桌面3. Kali 安装Cpolar 内网穿透4. 配置公网远程地址5. 公网远程Kali桌面连接6. 固定连接公网地址7. 固定地址连接测试 前言 Kali远程桌面的好处在于,它允许用户从远程位置访问Kali系统,而无需直接物理访…...
【WEB API自动化测试】接口文档与在线测试
这一篇我们主要介绍如何做API帮助文档,给API的调用人员介绍各个 API的功能, 输入参数,输出参数, 以及在线测试 API功能(这个也是方便我们自己开发调试) 我们先来看看我们的API最终帮助文档及在线测试最终达到的效果: 概要图 GET API 添加产品API: 删除…...
【深度学习每日小知识】Training Data 训练数据
训练数据是机器学习的基本组成部分,在模型的开发和性能中起着至关重要的作用。它是指用于训练机器学习算法的标记或注释数据集。以下是与训练数据相关的一些关键方面和注意事项。 Quantity 数量 训练数据的数量很重要,因为它会影响模型的泛化能力。通常…...
[acm算法学习] 后缀数组SA
学习自B站up主 kouylan 定义 后缀是包含最后个字母的子串 把字符串 str 的所有后缀按字典排序,sa[i]表示排名为 i 的后缀的开头下标 如何求解SA 倍增的方法 先把每个位置开始的长度为1的子串排序,在此基础上再把长度为2的子串排序(长度…...
DNS解析和它的三个实验
一、DNS介绍 DNS:domain name server 7层协议 名称解析协议 tcp /53 主从之间的同步 udp/53 名字解析 DNS作用:将域名转换成IP地址的协议 1.1DNS的两种实现方式 1.通过hosts文件(优先级最高) 分散的管理 linux /etc/hos…...
[redis] redis的安装,配置与简单操作
一、缓存的相关知识 1.1 缓存的概念 缓存是为了调节速度不一致的两个或多个不同的物质的速度,在中间对速度较慢的一方起到加速作用,比如CPU的一级、二级缓存是保存了CPU最近经常访问的数据,内存是保存CPU经常访问硬盘的数据,而且…...
C++ STL set容器
和 map、multimap 容器不同,使用 set 容器存储的各个键值对,要求键 key 和值 value 必须相等。 举个例子,如下有 2 组键值对数据: {<a, 1>, <b, 2>, <c, 3>} {<a, a>, <b, b>, <c, c>} 显然&…...
专业课148,总分410+电子科技大学858信号与系统考研经验电子信息与通信
今年专业课148分,总分410顺利被电子科技大学录取,回望这一年复习还有很多不足,总结一下自己的复习经历,希望对大家复习有所帮助。 数学:(多动手,多计算,多总结,打好基础…...
密码学:一文读懂非对称加密算法 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. 创建节…...
关于在前台应用路由调用子应用
需求 在实际写项目的过程中,关于一些前台的官网首页,会需要在一写特定的路由侠调用子应用的需求,在编写的过程中在公用的方法中,来进行处理,处理思想如下,在特定的.vue文件中, 后端 通过后端…...
Spring学习 Spring事务控制
7.1.事务介绍 7.1.1.什么是事务? 当你需要一次执行多条SQL语句时,可以使用事务。通俗一点说,如果这几条SQL语句全部执行成功,则才对数据库进行一次更新,如果有一条SQL语句执行失败,则这几条SQL语句全部不…...
c++一些使用频率较高的库函数
目录 memset() memset()接受三个参数: 注意 swap() reverse() reverse函数接收两个参数: reverse()反转整形向量元素顺序示例 …...
【从零开始学技术】Fiddler 抓取 https 请求大全
1.Fiddler代理浏览器设置 注意浏览器代理区别 Chrome/IE浏览器使用的都是系统代理设置 在chrome浏览器的设置中搜索代理,可以看到 打开IE浏览器,选择设置->Internet选项 Firefox浏览器使用的是单独的一套代理系统 在Firefox的代理设置中,我…...
第二百六十四回
文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了SliverPadding组件相关的内容,本章回中将介绍Sliver综合示例.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在前面的章回中介绍了各种Sliver相关的组件:SliverList,SliverGr…...
用Kimi chat识别并整理图片里面的文字
Kimi chat是有OCR功能的,可以识别图片中的文字。 下面这张图片是一本书的注释,里面提到有不少图书,利用Kimi chat就可以轻松完成提取其中图书书名的任务。 先拿一张图片来做实验。Kimichat的回复: 在您提供的文件内容中…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
