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的回复: 在您提供的文件内容中…...

驾驭未来:从传统运维到智能化运维的转型之路
随着科技的飞速发展,企业的业务需求也在不断变化。为了满足这些需求,企业的IT架构逐渐向云原生、容器化和微服务化演进。作为支撑企业业务发展的运维人员,我们需要紧跟时代步伐,不断提升自己的技能和认知水平。 在2023年全球运维大…...

LabVIEW在旋转机械故障诊断中的随机共振增强应用
在现代工业自动化领域,准确的故障诊断对于保障机械设备的稳定运行至关重要。传统的故障检测方法往往因噪声干扰而难以捕捉到微弱的故障信号。随着LabVIEW在数据处理和系统集成方面的优势日益凸显,其在旋转机械故障诊断中的应用开始发挥重要作用ÿ…...

尚硅谷大数据技术-数据湖Hudi视频教程-笔记02【核心概念(基本概念、数据写、数据读)】
大数据新风口:Hudi数据湖(尚硅谷&Apache Hudi联合出品) B站直达:https://www.bilibili.com/video/BV1ue4y1i7na 尚硅谷数据湖Hudi视频教程百度网盘:https://pan.baidu.com/s/1NkPku5Pp-l0gfgoo63hR-Q?pwdyyds阿里…...

鸿蒙(HarmonyOS)应用开发指南
1. 概述 1.1 简介 鸿蒙(即 HarmonyOS ,开发代号 Ark,正式名称为华为终端鸿蒙智能设备操作系统软件)是华为公司自 2012 年以来开发的一款可支持鸿蒙原生应用和兼容 AOSP 应用的分布式操作系统。该系统利用“分布式”技术将手机、电…...

Android 13 辅助屏导航栏不显示问题
问题 在Android 13 上开启辅助屏幕。但是发现辅助屏systemui 导航按 icon没有显示,但是点击对应的区域有作用 分析 可以用 anroid device monitor 工具分析视图 解决 public NavigationBarView(Context context, AttributeSet attrs) {super(context, attrs);…...

【QT】标准对话框
目录 1 概述 2 QFileDialog对话框 1.选择打开一个文件 2.选择打开多个文件 3.选择已有目录 4.选择保存文件名 3 QColorDialog对话框 4 QFontDialog对话框 5 QInputDialog标准输入对话框 1.输入文字 2.输入整数 3.输入…...

微信小程序跳转方式及问题
一、五种跳转方式 1.wx.navigateTo() 保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面 通常推荐使用 wx.navigateTo进行跳转,以便返回原页面,以提高加载速度 wx.navigateTo({url: })2.wx.redirectTo() 关闭当前页面&#x…...

Redis实现分布式会话
Redis实现分布式会话 1 什么是分布式会话 1 这是我么之前学过的注册登录模式 2 如果非常多的人访问,因为单台服务器的访问承受能力是有限的,那么我们就想用多态服务器来承担压力 3 一般通过负载均衡的方式来实现,来分担服务器的压力。 4 负…...

AntDesignBlazor示例——暗黑模式
本示例是AntDesign Blazor的入门示例,在学习的同时分享出来,以供新手参考。 示例代码仓库:https://gitee.com/known/BlazorDemo 1. 学习目标 暗黑模式切换查找组件样式覆写组件样式 2. 添加暗黑模式切换组件 1)双击打开MainL…...

高通平台开发系列讲解(USB篇)adb function代码分析
文章目录 一、FFS相关动态打印二、代码入口三、ffs_alloc_inst四、ep0、ep1&ep2的注册五、读写过程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本文主要介绍高通平台USB adb function代码f_fs.c。 一、FFS相关动态打印 目录:msm-4.14/drivers/usb/gadget/fun…...