Qt网络通信——获取本机网络信息

news2025/1/20 14:54:07

查询一个主机的MAC地址或者IP地址是网络应用中常用到的功能,Qt提供了QHostInfo和QNetworkInterface 类可以用于此类信息的查询

1.QHostInfo 类(显示和查找本地的信息)是的主要函数

 类别 函数原型作用
公共函数QList <QHostAdress> address()返回与hostName()主机关联的IP地址列表
QString hostName()返回通过IP查找的主机的名称
静态函数QHostInfo fromName(QSring &name)返回指定主机名的IP地址
QHostInfo localHostName()返回本机的主机名
int lookupHost(QString &name,QObject *receiver,char*member)以异步方式根据主机名查找主机的IP地址,并返回一个表示本次查找的ID,可用于abortHostLookup()

int lookupHost(QString &name,QObject *receiver,char*member)

name可以是主机名,可以是域名或者是一个IP地址。receiver和member指定一个响应函数的接收者和槽函数名称。

2.QNetworkInterface 类(获得应用程序上所在主机的所有网络接口,包括子网掩码和广播地址等)的主要函数

类别 函数原型作用
公共函数QList <QNetworkAddressEntry> addressEntries()返回该网络接口(包括子网掩码和广播地址)的IP列表
QString   hardwareAddress()返回该接口的低级硬件地址,以太网里就是MAC地址
QString  humanReadableName()

返回可以读懂的接口名称,如果名称不太确定,得到的就是name()函数的返回值

bool isValid()如果接口信息有效就返回true
QString name()返回网络接口名称
静态函数QList <QHostAddress> allAddress()返回主机上所有IP地址的列表
QList <QNetworkInterface> allInterfaces()返回主机上所有接口的网络列表

QNetworkInterface 中包含的网络信息接口有IP地址,子网掩码和广播地址

分别用:ip()、netmask() 、broadcast()函数返回

NetworkInformation.h
#ifndef NETWORKINFORMATION_H
#define NETWORKINFORMATION_H

#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>
#include <QMessageBox>
#include <QGridLayout>
#include <QHostInfo>
#include <QNetworkInterface>
class NetworkInformation : public QWidget
{
    Q_OBJECT

public:
    NetworkInformation(QWidget *parent = nullptr);
    ~NetworkInformation();

    void getHostInformation();  //获取主机信息

public slots:
    void slotDetail();

private:

    QLabel *lab_host;
    QLineEdit *lineEdit_hostName;

    QLabel *lab_IpAdress;
    QLineEdit *lineEdit_IpAdress;

    QPushButton *btn_detail;
    QGridLayout *mainLayout;


};
#endif // NETWORKINFORMATION_H

NetworkInformation.cpp

#include "networkinformation.h"

NetworkInformation::NetworkInformation(QWidget *parent)
    : QWidget(parent)
{


    lab_host=new QLabel(QStringLiteral("主机名:"));
    lineEdit_hostName=new QLineEdit;

    lab_IpAdress=new QLabel(QStringLiteral("IP地址:"));
    lineEdit_IpAdress=new QLineEdit;

    btn_detail=new QPushButton(QStringLiteral("详细"));

    mainLayout=new QGridLayout;
    mainLayout->addWidget(lab_host,0,0);
    mainLayout->addWidget(lineEdit_hostName,0,1);
    mainLayout->addWidget(lab_IpAdress,1,0);
    mainLayout->addWidget(lineEdit_IpAdress,1,1);
    mainLayout->addWidget(btn_detail,2,0,1,2);
    mainLayout->addWidget(lab_host,0,0);

    setLayout(mainLayout);

    getHostInformation();
    connect(btn_detail,SIGNAL(clicked()),this,SLOT(slotDetail()));

}

NetworkInformation::~NetworkInformation()
{
}

//获取主机信息
void NetworkInformation::getHostInformation()
{
   QString localHostName=QHostInfo::localHostName();   //获取主机名
   lineEdit_hostName->setText(localHostName);

   QHostInfo hostInfo=QHostInfo::fromName(localHostName);//本机的IP地址

   QList<QHostAddress> listAdress=hostInfo.addresses();  //IP地址列表
   if(!listAdress.isEmpty())
   {
       lineEdit_IpAdress->setText(listAdress.first().toString());  //如果主机的IP列表不为空,则使用其第一个IP地址
   }

}

//获得与网络接口相关的信息
void NetworkInformation::slotDetail()
{
   QString detail="";
   QList<QNetworkInterface> list=QNetworkInterface::allInterfaces(); //主机上所有的接口的网络列表

   for(int i=0;i<list.count();i++)
   {
       QNetworkInterface interface=list.at(i);

       detail=detail+(QStringLiteral("设备:"))+interface.name()+'\n'; // 获取网络接口的名字
       detail=detail+(QStringLiteral("硬件地址:"))+interface.hardwareAddress()+'\n';//获取网络接口的硬件地址

       QList<QNetworkAddressEntry> entryList=interface.addressEntries();  //返回网络接口(包括子网掩码和广播地址)的Ip地址列表
       for(int j=0;j<list.count();j++)
        {
           QNetworkAddressEntry entry=entryList.at(i);

           detail=detail+'\t'+(QStringLiteral("IP地址:"))+entry.ip().toString()+'\n';
           detail=detail+'\t'+(QStringLiteral("子网掩码:"))+entry.netmask().toString()+'\n';
            detail=detail+'\t'+(QStringLiteral("广播地址:"))+entry.broadcast().toString()+'\n';
        }
       QMessageBox::information(this,(QStringLiteral("Detail")),detail);
   }

}

结果:

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

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

相关文章

读<一例 Go 编译器代码优化 bug 定位和修复解析>

看到一例 Go 编译器代码优化 bug 定位和修复解析[1]这样一篇文章,感觉有些意思. 在此复现和记录 在Go 1.16版本下,是没有这个bug[2]的(已修复). 参照gvm:灵活的Go版本管理工具[3] 将Go版本切至有问题的1.13.5(或1.14.6) ➜ go versiongo version go1.13.5 darwin/amd64 packag…

Node常用内置模块之url模块和querystring模块

1、URL类 url模块在v16的nodejs中已经明确被废弃&#xff0c;在将来的升级node中&#xff0c;可能被不支持。 官网建议在废弃url、querystring模块后&#xff0c;采用URL类去替代。 图示 URL 各部分 旧版的url模块 作用&#xff1a;url 模块是用于处理和解析 URL 的模块&…

Unity ShaderGraph教程——基础shader

1.基本贴图shader&#xff1a; 基础贴图实现&#xff1a;主贴图、自发光贴图、光滑度贴图、自发光贴图&#xff08;自发光还加入了颜色影响和按 钮开关&#xff09;. 步骤&#xff1a;最左侧操作组——新建texture2D——新建sample texture 2D承…

Linux上部署zentao禅道18.6版本

1. cd /opt 2. 下载 ZenTaoPMS-18.6-zbox_amd64.tar.gz wget https://dl.cnezsoft.com/zentao/18.6/ZenTaoPMS-18.6-zbox_amd64.tar.gz 3. 解压 tar -zxvf ZenTaoPMS-18.6-zbox_amd64.tar.gz 4. 解压成功, 可以看到多了个zbox文件 5. cd zbox/ 进入该目录 6. 修改apache默认…

乙酰基六肽-18——刺激脂肪合成,增加指定部位脂肪,塑造完美曲线

简介 乙酰六肽-18&#xff08;丰胸肽&#xff09;为一种乙酰化的六肽&#xff0c;可显著刺激使用部位脂肪合成&#xff0c;增大胸部或脸颊的体积&#xff0c;塑造完美身材。 INCI 名称 乙酰六肽-18 分子式 C30H54N9O10 分子量 700.32 CAS号 1400634-44-7…

WPF_布局基础

布局容器 Grid 定义由列和行组成的灵活的网格区域。 行 <Grid.RowDefinitions><RowDefinition/><RowDefinition/></Grid.RowDefinitions> 列 <Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDe…

免费开源MES系统|自动排产管理

万界星空科技免费MES系统助力企业实现生产排程自动化&#xff0c;降低人力成本。生产计划排产管理是指制定一个可行的生产计划并按照该计划安排生产资源和制造活动的过程。 它是制造企业管理中的一个关键过程&#xff0c;涉及到计划制定、资源管理、物料采购、工厂布局、生产调…

手搓的一款基于sql脚本的数据初始化组件

产口孵化新项目时&#xff0c;表中需要提前预置部份数据。如字典&#xff0c;角色、菜单、配置等。以达到快速布署的目的。这部份数据会随着某些因素的影响。如地区变化、系统定制方面。无法使用统一的一份sql。旧方案是在代码里面动态的作insert操作。在项目启动的时候初始化这…

IPIDEA确认参加2023 CCEE(深圳)雨果跨境全球电商展览会

9月1日—9月3日&#xff0c;雨果跨境将在深圳会展中心&#xff08;福田&#xff09;举办 “2023CCEE&#xff08;深圳&#xff09;雨果跨境全球电商展览会”。 届时&#xff0c;IPIDEA将参加此次跨境年度盛会。作为一家专业的全球HTTP代理商&#xff0c;IPIDEA为与会商家准备了…

MES管理系统数据建模有哪些注意事项

在进行MES管理系统数据建模时&#xff0c;需要注意以下几个方面&#xff0c;以确保建立高效、可靠且适应性强的数据模型&#xff0c;为企业的生产管理提供有力的支持。 首先&#xff0c;精确理解业务需求是进行数据建模的前提。与相关部门和人员进行充分的沟通&#xff0c;了解…

基于web的图书管理系统java书店进销存 jsp源代码Mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于web的图书管理系统 系统有1权限:管理员 二、主要…

小程序中如何给会员发送微信服务通知

通过发送微信服务通知&#xff0c;可以及时向会员推送最新的活动、优惠信息等重要通知&#xff0c;从而增加用户参与度和购买意愿。下面就介绍怎么给会员发送微信服务通知的方法和步骤。 1. 找到指定的会员卡。在管理员后台->会员管理处&#xff0c;找到需要接收服务通知的…

【Navicat Premium 16】使用Navicat将excel的数据进行单表的导入,详细操作

业务场景&#xff1a;经常与数据打交道嘛&#xff0c;有的时候会需要将excel的数据导入到数据库中&#xff0c;后面发现对于单表的数据导入&#xff0c;使用Navicat还是非常方便的&#xff0c;仅仅需要将字段关系映射好就可以了 一、开始操作 前提条件&#xff1a;已经成功连接…

算法通关村第9关【白银】| 二分查找与搜索树高频问题

基于二分查找的拓展问题 1.山脉数组的峰顶索引 思路&#xff1a;二分查找 山峰有三种状态&#xff1a;需要注意数组边界 1.顶峰&#xff1a;arr[mid]>arr[mid1]&&arr[mid]>arr[mid-1] 2.上坡&#xff1a;arr[mid]<arr[mid1] 3.下坡&#xff1a;arr[mid]…

【树DP】2021ICPC南京 H

Problem - H - Codeforces 题意&#xff1a; 思路&#xff1a; 这题应该算是铜牌题 铜牌题 简单算法 基础思维 简单复盘一下思路 首先&#xff0c;我们发现有个很特殊的条件&#xff1a; ti < 3 然后看一下样例&#xff1a; 注意到&#xff0c;对于一个结点 u &#…

1.3.2背包模型(二)

1.二维费用的背包问题 有 N N N件物品和一个容量是 V V V的背包&#xff0c;背包能承受的最大重量是 M M M。 每件物品只能用一次。体积是 v i v_{i} vi​&#xff0c;重量是 m i m_{i} mi​&#xff0c;价值是 w i w_{i} wi​。 求解将哪些物品装入背包&#xff0c;可使物…

想要搞懂接口测试和功能测试有什么区别,那就必须知道他们的基本原理

本文主要分为两个部分&#xff1a; 第一部分&#xff1a;主要从问题出发&#xff0c;引入接口测试的相关内容并与前端测试进行简单对比&#xff0c;总结两者之前的区别与联系。但该部分只交代了怎么做和如何做&#xff1f;并没有解释为什么要做&#xff1f; 第二部分&#xf…

图形化管理工具ossbrowser

文章目录 一、OSS介绍二、通过工具管理OSS三、安装四、使用-通过AK五、免责声明摘抄 一、OSS介绍 云对象存储OSS&#xff08;Object Storage Service&#xff09;是一款海量、安全、低成本、高可靠的云存储服务&#xff0c;可提供99.9999999999%&#xff08;12个9&#xff09;…

WebGL:基于web的交互式2D/3D图形引擎

推荐&#xff1a;使用 NSDT编辑器 快速搭建3D应用场景 在本指南中&#xff0c;我们旨在回答与WebGL技术相关的大多数问题。首先&#xff0c;让我们从WebGL定义开始。 什么是WebGL&#xff1f; WebGL&#xff08;Web图形库&#xff09;是一个JavaScript应用程序编程接口&#x…

Python学习 -- 异常捕获技巧

在编写Python代码时&#xff0c;异常处理是确保程序稳定性的关键。Python提供了灵活的异常捕获机制&#xff0c;包括try...except语句、try...except...else语句和try...except...finally语句。本文将详细介绍这些异常处理技巧&#xff0c;并为每种情况提供代码案例。 一、try…