C++ Qt开发:QNetworkInterface网络接口组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QNetworkInterface组件实现查询详细的网络接口参数。
在Qt网络编程中,QNetworkInterface是一个强大的类,提供了获取本地网络接口信息的能力。通过QNetworkInterface,可以轻松地获取有关网络接口的信息,包括接口的名称、硬件地址、IP地址和子网掩码等。这个类对于需要获取本地网络环境信息的应用程序特别有用,例如网络配置工具、网络监控程序等。QNetworkInterface通过提供一致而易于使用的接口,使得网络编程中的任务更加简便和可靠。
以下是QNetworkInterface类的一些常用函数的解释:
| 函数 | 描述 |
|---|---|
static QList<QNetworkInterface> allInterfaces() | 返回系统中所有可用的网络接口列表。 |
static QNetworkInterface interfaceFromName(const QString &name) | 根据给定名称返回对应的网络接口。 |
static QList<QNetworkInterface> allAddresses() | 返回系统中所有网络接口的IP地址列表。 |
QString name() const | 返回网络接口的名称。 |
QNetworkInterface::InterfaceType type() const | 返回网络接口的类型。 |
bool isValid() const | 判断网络接口是否有效。 |
QNetworkAddressEntry addressEntryAt(int index) const | 返回索引位置的网络接口地址。 |
QList<QNetworkAddressEntry> addressEntries() const | 返回网络接口的地址列表。 |
QNetworkAddressEntry addressEntry() const | 返回首选网络接口地址,如果没有地址则返回空的QNetworkAddressEntry对象。 |
QNetworkInterface::HardwareAddress macAddress() const | 返回网络接口的硬件地址(MAC地址)。 |
bool isLoopBack() const | 判断网络接口是否是回环接口。 |
bool isPointToPoint() const | 判断网络接口是否是点对点连接。 |
bool supportsMulticast() const | 判断网络接口是否支持多播。 |
bool operator==(const QNetworkInterface &other) const | 判断两个网络接口是否相等。 |
bool operator!=(const QNetworkInterface &other) const | 判断两个网络接口是否不相等。 |
QList<QNetworkInterface> allInterfaces(QNetworkInterface::InterfaceType type) | 返回指定类型的所有网络接口列表。 |
QNetworkInterface类提供了丰富的功能,用于获取和处理系统中的网络接口信息。通过这些函数,可以轻松地检索有关网络接口的各种详细信息,为网络编程提供了便捷的工具。
网卡的查询非常容易实现,只需要调用通用接口QNetworkInterface::allInterfaces()即可,该函数可以直接返回指定类型的所有网络接口列表。
在解析IP地址时还需要使用QNetworkAddressEntry类,QNetworkAddressEntry是用于表示网络接口地址信息的类。它包含了IP地址、子网掩码、广播地址以及前缀长度等关键信息,为处理网络配置和操作提供了便捷的工具。通过QNetworkAddressEntry可以轻松地获取和设置网络接口的各种地址属性,用于网络编程中的接口配置和信息查询。
以下是QNetworkAddressEntry类的一些常用函数和描述:
| 函数 | 描述 |
|---|---|
QNetworkAddressEntry() | 默认构造函数,创建一个空的QNetworkAddressEntry对象。 |
QNetworkAddressEntry(const QNetworkAddressEntry &other) | 拷贝构造函数,根据给定的other对象创建一个新的对象。 |
QNetworkAddressEntry &operator=(const QNetworkAddressEntry &other) | 赋值运算符,将other对象的值赋给当前对象。 |
void setIp(const QHostAddress &address) | 设置IP地址。 |
QHostAddress ip() const | 返回IP地址。 |
void setNetmask(const QHostAddress &netmask) | 设置子网掩码。 |
QHostAddress netmask() const | 返回子网掩码。 |
void setBroadcast(const QHostAddress &broadcast) | 设置广播地址。 |
QHostAddress broadcast() const | 返回广播地址。 |
void setPrefixLength(int length) | 设置前缀长度。 |
int prefixLength() const | 返回前缀长度。 |
void clear() | 清空QNetworkAddressEntry对象,重置为初始状态。 |
通过使用aInterface.addressEntries()我们可直接读入IP地址列表,并将其放入到QNetworkAddressEntry内保存,通过*.count()得到网卡总数量,并调用at()得到我们所需要的地址,最后就能够通过aEntry.ip().*的方式遍历出所有的地址信息,代码如下所示;
void MainWindow::on_pushButton_clicked()
{QList<QNetworkInterface> list=QNetworkInterface::allInterfaces();for(int i=0;i<list.count();i++){QNetworkInterface aInterface=list.at(i);if (!aInterface.isValid())continue;ui->plainTextEdit->appendPlainText("设备名称:"+aInterface.humanReadableName());ui->plainTextEdit->appendPlainText("硬件地址:"+aInterface.hardwareAddress());QList<QNetworkAddressEntry> entryList=aInterface.addressEntries();for(int j=0;j<entryList.count();j++){QNetworkAddressEntry aEntry=entryList.at(j);ui->plainTextEdit->appendPlainText("IP 地址:"+aEntry.ip().toString());ui->plainTextEdit->appendPlainText("子网掩码:"+aEntry.netmask().toString());ui->plainTextEdit->appendPlainText("广播地址:"+aEntry.broadcast().toString());}ui->plainTextEdit->appendPlainText(" ------------------------------------------- ");ui->plainTextEdit->appendPlainText("\n");}
}
运行后点击查询网卡信息,可得到完整的本机网卡,如下图;

相关文章:
C++ Qt开发:QNetworkInterface网络接口组件
Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QNetworkInterface组件实现查询详细的…...
Luajit 2023移动版本编译 v2.1.ROLLING
文章顶部有编好的 2.1.ROLLING 2023/08/21版本源码 Android 64 和 iOS 64 luajit 目前最新的源码tag版本为 v2.1.ROLLING on Aug 21, 2023应该是修正了很多bug, 我是出现下面问题才编的. cocos2dx-lua 游戏 黑屏 并报错: [LUA ERROR] bad light userdata pointer 编…...
c++ 常用新特性总结【c++11】,【c++14】,【c++17】,【c++20】
文章目录 常用的c11新特性1.自动推导类型(auto)2.lambda表达式3.智能指针4.范围for循环5.右值引用 - 移动语义6.类型别名7.constexpr8.static_assert(静态断言)9.nullptr10.列表初始化11.继承构造函数12.显示虚函数重载(override)13.final14.变长模板参数15.新的容器与算法16.强…...
Feign实现微服务间远程调用续;基于Redis实现消息队列用于延迟任务的处理,Redis分布式锁的实现;(黑马头条Day05)
目录 延迟任务和定时任务 使用Redis设计延迟队列原理 点评项目中选用list和zset两种数据结构进行实现 如何缓解Redis内存的压力同时保证Redis中任务能够被正确消费不丢失 系统流程设计 使用Feign实现微服务间的任务消费以及文章自动审核 系统微服务功能介绍 提交文章-&g…...
CSS 常见属性设置
一. 文本属性 1.1. 装饰线 text-decoration text-decoration有如下常见取值: none:无任何装饰线(可以去除a元素默认的下划线)underline:下划线overline:上划线line-through:中划线(删除线&…...
docker学习入门
1、docker简介 docker官网: www.docker.com dockerhub官网: hub.docker.com docker文档官网:docs.docker.com Docker是基于Go语言实现的云开源项目。 Docker的主要目标是:Build, Ship and Run Any App, Anywhere(构建&…...
蓝牙系列七:开源蓝牙协议栈BTStack数据处理
继续蓝牙系列的研究。 在上篇博客,通过阅读BTStack的源码,大体了解了其框架,对于任何一个BTStack的应用程序都有一个main函数,这个main函数是统一的。这个main函数做了某些初始化之后,最终会调用到应用程序提供的btstack_main,在btstack_main里面首先做一些初始化,然后…...
数据仓库作业一:第1章 绪论
目录 一、给出下列英文短语或缩写的中文名称,并简述其含义。二、简述操作型数据与分析型数据的主要区别。三、简述数据仓库的定义。四、简述数据仓库的特征。五、简述主题的定义。六、简述元数据的概念。七、简述数据挖掘的主要任务。八、简述数据挖掘的主要步骤。九…...
spring aop中获取request和response
Spring AOP 操作中如何使用request和response 实际使用时,如果方法一不行,请使用方法二 方法一 HttpServletRequest request ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); HttpServletResponse respons…...
在Mac上安装nginx+rtmp 本地服务器
需要使用终端命令,如果没有Homebrew,要安装Homebrew,执行: ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 一、安装Nginx 1、先clone Nginx项目到本地: brew tap de…...
解决ChatGPT发送消息没有反应
ChatGPT发消息没反应 今天照常使用ChatGPT来帮忙码代码,结果发现发出去的消息完全没有反应,即不给我处理,也没有抱任何的错误,按浏览器刷新,看起来很正常,可以查看历史对话,但是再次尝试还是一…...
windows关闭copilot预览版
如果用户不想在windows系统当中启用Copilot,可以通过以下三种方式禁用。 第一种:隐藏Copilot 按钮 右键点击任务栏,取消勾选“显示 Copilot(预览版)按钮”,任务栏则不再显示,用户可以通过快捷键…...
基于Java的社区买菜系统(Vue.js+SpringBoot)
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.1.1 数据中心模块2.1.2 菜品分类模块2.1.3 菜品档案模块2.1.4 菜品订单模块2.1.5 菜品收藏模块2.1.6 收货地址模块 2.2 可行性分析2.3 用例分析2.4 实体类设计2.4.1 菜品分类模块2.4.2 菜品档案模块2.4.3…...
html--心花怒放
代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>Canvas 绘制一个❤</title><link rel"shortcut icon" href"../../assets/images/icon/favicon.ico" type"ima…...
FPGA的配置状态字寄存器Status Register
目录 简介 状态字定义 Unknown Device/Many Unknow Devices 解决办法 一般原因 简介 Xilinx的FPGA有多种配置接口,如SPI,BPI,SeletMAP,Serial,JTAG等;如果从时钟发送者的角度分,还可以…...
【HarmonyOS Arkts笔记】http网络请求封装
common.ts export default class CommonConstant {/*** The host address of the server.*/static readonly SERVER: string 请求接口地址;/*** The request success code.*/static readonly SUCCESS_CODE: number 200;/*** Read timeout.*/static readonly READ_TIMEOUT: n…...
html前端的几种加密/解密方式
HTML前端的加密解密方式有以下几种: 一、base64加密 Base64编码:Base64是一种将二进制数据转换为可打印字符的编码方式。在前端,可以使用JavaScript的btoa()函数进行Base64编码,使用atob()函数进行解码。 var str "hello…...
算法学习01:排序二分
算法学习01:排序&&二分 文章目录 算法学习01:排序&&二分前言需要记忆的模版:快速排序归并排序:整数二分:浮点数二分 一、排序1.快速排序2.归并排序: 二、二分1.整数2.浮点数 总结 前言 需要…...
OpenAI (ChatGPT)中国免费试用地址
GitHub - click33/chatgpt---mirror-station-summary: 汇总所有 chatgpt 镜像站,免费、付费、多模态、国内外大模型汇总等等 持续更新中…… 个人能力有限,搜集到的不多,求大家多多贡献啊!众人拾柴火焰高!汇总所有 cha…...
IOS面试题object-c 11-20
11、解释self [super init]方法? 容错处理, 当父类初始化失败,会返回一个nil, 表示初始化失败。 由于继承的关系, 子类是需要拥有父类的实例和行为, 因此, 我们必须先初始化父类,然后再初始化子类 12、简述使用block有什么优点?代码紧凑,传值…...
Java的invokedynamic指令:Lambda表达式和Nashorn引擎的基础
Java的invokedynamic指令:Lambda表达式和Nashorn引擎的基础 Java 7引入的invokedynamic指令彻底改变了JVM的动态语言支持能力,为后续Lambda表达式和Nashorn引擎的实现奠定了基础。这一指令通过运行时动态解析方法调用,显著提升了灵活性和性能…...
Claude Design 登场,设计工具分化,Figma“Sketch 时刻”将至?
关于 Claude Design 的思考与感悟 2026 年 4 月 18 日,山姆亨利戈尔德试用了 Claude Design,并对局势发展有了一些想法。随着产品团队规模扩大,设计需在工程组织中证明自身价值,促使设计向系统化发展。Figma 发明了组件、样式、变…...
如何在Mac上免费解锁百度网盘SVIP下载速度:完整指南
如何在Mac上免费解锁百度网盘SVIP下载速度:完整指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘缓慢的下载速度而烦恼吗…...
Uncle小说桌面阅读器:打造你的个人数字书房终极指南
Uncle小说桌面阅读器:打造你的个人数字书房终极指南 【免费下载链接】uncle-novel 📖 Uncle小说,PC版,一个全网小说下载器及阅读器,目录解析与书源结合,支持有声小说与文本小说,可下载mobi、epu…...
从一道笔试题看Java内存模型:String s = new String(“abc“) 到底创建了几个对象?
从一道笔试题看Java内存模型:String s new String("abc") 到底创建了几个对象? 在Java开发者的技术面试中,关于字符串对象创建的问题几乎成了必考题。这道看似简单的题目背后,隐藏着Java内存模型(JMM&#…...
GD32E230 ADC多通道采集实战:用DMA解放CPU,5个传感器数据同时读
GD32E230 ADC多通道DMA采集实战:5路传感器数据高效读取方案 在物联网终端设备开发中,传感器数据采集往往是系统的基础功能。想象一下这样的场景:你的环境监测节点需要同时采集温度、湿度、光照强度、电池电压和CO2浓度五类数据,传…...
用C语言手把手教你写一个Linux虚拟键盘驱动(基于uinput模块)
用C语言手把手教你写一个Linux虚拟键盘驱动(基于uinput模块) 在嵌入式开发和系统编程领域,模拟用户输入是一个常见需求。想象一下这样的场景:你正在开发一台没有物理键盘的工业控制设备,或者需要为自动化测试创建可靠的…...
Phi-4-mini-reasoning 3.8B 3分钟快速调用演示:一行代码启动推理服务
Phi-4-mini-reasoning 3.8B 3分钟快速调用演示:一行代码启动推理服务 1. 开箱即用的推理体验 如果你正在寻找一个既轻量又强大的语言模型,Phi-4-mini-reasoning 3.8B可能会让你眼前一亮。这个3.8B参数的模型在保持小巧体积的同时,展现出了令…...
别再折腾VS2017了!用VSCode+CMake在Windows上编译GmSSL国密库(附一键脚本)
告别笨重IDE:VSCodeCMake极简编译GmSSL全攻略 在Windows平台编译开源库向来是件令人头疼的事——尤其是当你不得不安装动辄几十GB的Visual Studio全家桶,仅仅是为了使用其中的MSVC编译器。这种"杀鸡用牛刀"的开发体验,让许多追求效…...
nSkinz:CS:GO终极皮肤修改器完整指南
nSkinz:CS:GO终极皮肤修改器完整指南 【免费下载链接】nSkinz Skin changer for CS:GO 项目地址: https://gitcode.com/gh_mirrors/ns/nSkinz 想要在CS:GO中自由更换武器皮肤却不想花费大量金钱?nSkinz开源皮肤修改器为你提供了完美的解决方案。这…...
