C++ Qt开发:QNetworkInterface网络接口组件

news2024/9/22 13:30:26

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");
    }
}

运行后点击查询网卡信息,可得到完整的本机网卡,如下图;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1503160.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试遇到了接口分析和测试用例分析题,该如何下手?

只要有软件产品的公司百分之九十以上都会做接口测试&#xff0c;要做接口测试的公司那是少不了接口测试工程师的&#xff0c;接口测试工程师相对于其他的职位又比较轻松并且容易胜任。如果你想从事接口测试的工作那就少不了对接口进行分析&#xff0c;同时也会对测试用例进行研…

el根据需求合并列

将 列分为 3 3 1 的格式 以下是vue代码&#xff1a; <el-table:data"dataSource":border"true":header-cell-style"{ font-weight: normal, text-align: center }":cell-style"{ text-align: center }"size"mini"style…

CODESYS双通气缸功能块(ST源代码)

博途PLC双通气缸功能块请参考下面文章链接: https://rxxw-control.blog.csdn.net/article/details/136415539https://rxxw-control.blog.csdn.net/article/details/136415539CODESYS 结构变量使用 https://rxxw-control.blog.csdn.net/article/details/126248829

NUMA简介

NUMA 1 什么是NUMA 早期的计算机&#xff0c;内存控制器还没有整合进 CPU&#xff0c;所有的内存访问都需要经过北桥芯片来完成。如下图所示&#xff0c;CPU 通过前端总线&#xff08;FSB&#xff0c;Front Side Bus&#xff09;连接到北桥芯片&#xff0c;然后北桥芯片连接到…

go语言添加代理

LiteIDE 工具->管理 https://mirrors.aliyun.com/goproxy/或https://goproxy.cn,direct 命令行 go env -w GOPROXYhttps://goproxy.cn,direct

找不到duilib.dll:是什么文件?如何解决

当你尝试打开某个程序软件时&#xff0c;你可能会看到一条错误信息&#xff0c;提示你缺失一个名为“duilib.dll”的文件。这个文件通常与程序开发中使用的UI框架相关&#xff0c;缺失它会导致程序无法正常运行。那么&#xff0c;如何解决这个问题呢&#xff1f;本文将为你提供…

Java项目:45 ssm004新生报到系统+jsp(含文档)

项目介绍 技术栈&#xff1a;spring springMVC mybatis mysql 系统角色&#xff1a;管理员&#xff0c;学生 系统功能&#xff1a;个人中心&#xff0c;管理员信息&#xff0c;班级信息&#xff0c;学院信息&#xff0c;专业信息&#xff0c;消息通知&#xff0c;缴费信息&a…

让你秒会C语言冒泡排序

代码展示&#xff1a; 代码讲解&#xff1a; 一&#xff0c;代码目的&#xff1a; 将一个乱序的数组通过冒泡排序排成升序。 二&#xff0c;代码重点理解&#xff1a; 1&#xff1a;sz为元素个数&#xff0c;其必须和数组arr一起作为参数传给bubble_sort函数&#xff0c;…

【框架设计】MVC、MVP、MVVM对比图

1. MVC&#xff08;Model-View-Controller&#xff09; 2. MVP&#xff08;Model-View-Presenter&#xff09; 3. MVVM&#xff08;Model-View-ViewModel&#xff09;

基于SVM模型的网络入侵检测模型训练与评估(NSL-KDD数据集)

简介 针对网络安全领域的NSL-KDD数据集进行分类任务的预处理和模型训练、以及超参数调优。 数据预处理 读取并解析数据集&#xff1b;检查并删除指定列&#xff08;outcome&#xff09;的缺失值&#xff1b;对类别型特征&#xff08;protocol_type, service, flag&#xff0…

Stable Diffusion 模型下载:ZavyChromaXL(现实、魔幻)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 作者述&#xff1a;该模型系列应该是用于 SDXL 的 ZavyMix SD1.5 模型的延续。主要重点是获…

21-Java观察者模式 ( Observer Pattern )

Java备忘录模式 摘要实现范例 观察者模式 ( Observer Pattern ) 常用于对象间存在一对多关系时&#xff0c;比如&#xff0c;当一个对象被修改时&#xff0c;需要自动通知它的依赖对象 观察者模式属于行为型模式 摘要 1. 意图 定义对象间的一种一对多的依赖关系&#xff…

先进电机技术 —— 伺服驱动器与变频器

一、变频器与伺服驱动器发展趋势 在近年来的技术发展中&#xff0c;变频器和伺服驱动器均呈现出显著的先进性提升和技术融合趋势&#xff0c;以下是一些主要的发展方向&#xff1a; ### 变频器的发展趋势&#xff1a; 1. **智能化与网络化**&#xff1a; - 高级变频器集成…

律师事务所案件管理新宠:Java+SpringBoot+Vue+MySQL实战

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

STL之map容器代码详解

基础概念 简介&#xff1a; map中所有元素都是pair。pair中第一个元素为key&#xff08;键值&#xff09;&#xff0c;起到索引作用&#xff0c;第二个元素为value&#xff08;实值&#xff09;。所有元素都会根据元素的键值自动排序。 本质&#xff1a; map/multimap属于关…

js对象 静态方法和实例方法

求下面代码的输出结果&#xff1a; 首先先分析一下上面各函数&#xff1a; Person.say function(){console.log("a")} 第一个say()方法是定义在Person函数身上的&#xff0c;我们如果想使用这个方法&#xff0c;可以通过Person().say()来调用 this.say function()…

性能测试干2年,还不会这个技术点?

nmon是一种在AIX与各种Linux操作系统上广泛使用的监控与分析工具&#xff0c;记录的信息比较全面&#xff0c;结合nmon_analyzer工具产生数据文件与图形化结果。 nmon可监控的数据类型 内存使用情况、磁盘适配器、文件系统中的可用空间、CPU使用率等等数据信息 特点 ①占用…

“删边“的并查集------反向并查集

目录 1.题目2.思路3.代码 默认大家都会并查集了 1.题目 小美认为&#xff0c;在人际交往中&#xff0c;但是随着时间的流逝&#xff0c;朋友的关系也是会慢慢变淡的&#xff0c;最终朋友关系就淡忘了。 现在初始有一些朋友关系&#xff0c;存在一些事件会导致两个人淡忘了他们…

业务代码中如何使用装饰器模式?

装饰器模式&#xff08;Decorator Pattern&#xff09;介绍 装饰器模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;我们可以动态地给一个对象添加额外的职责。而不是通过继承增加子类的方式来扩展对象的功能&#xff0c;装饰器模式使用组合的…

Android14之编译输出system/product/vendor/odm分区(一百九十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…