QT网络编程之获取本机网络信息
一.概述
查询一个主机的MAC地址或者IP地址是网络应用中常用到的功能,Qt提供了QHostInfo和QNetworkInterface 类可以用于此类信息的查询
1.QHostInfo 类(显示和查找本地的信息)
2.QNetworkInterface 类(获得应用程序上所在主机的所有网络接口,包括子网掩码和广播地址)
推荐一个不错的人工智能学习网站,通俗易懂,内容全面,作为入门科普和学习提升都不错,分享一下给大家:https://www.captainbed.cn/ai
二.代码实现
1.dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QHostInfo>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
private slots:
void lookedUpHostInfo(const QHostInfo &host);
void on_btnGetHostInfo_clicked();
void on_btnDetail_clicked();
void on_btnLookup_clicked();
void on_btnALLInterface_clicked();
void on_btnClear_clicked();
private:
Ui::Dialog *ui;
QString protocolName(QAbstractSocket::NetworkLayerProtocol protocol);
};
#endif // DIALOG_H
2.dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
#include <QHostInfo>
#include <QNetworkInterface>
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::lookedUpHostInfo(const QHostInfo &host)
{//查找主机信息的槽函数
QList<QHostAddress> addList=host.addresses();//
if (!addList.isEmpty())
for (int i=0;i<addList.count();i++)
{
QHostAddress aHost=addList.at(i);
bool show=ui->chkOnlyIPv4->isChecked();//只显示IPv4
if (show)
show=QAbstractSocket::IPv4Protocol==aHost.protocol();
else
show=true;
if (show) {
ui->plainTextEdit->appendPlainText("协 议:"+protocolName(aHost.protocol()));
ui->plainTextEdit->appendPlainText(aHost.toString());
}
}
}
void Dialog::on_btnGetHostInfo_clicked()
{//QHostInfo获取主机信息
QString hostName=QHostInfo::localHostName();//本地主机名
ui->plainTextEdit->appendPlainText("本机主机名:"+hostName+"\n");
QHostInfo hostInfo=QHostInfo::fromName(hostName); //本机IP地址
QList<QHostAddress> addList=hostInfo.addresses();//IP地址列表
if (!addList.isEmpty())
for (int i=0;i<addList.count();i++)
{
QHostAddress aHost=addList.at(i); //每一项是一个QHostAddress
bool show=ui->chkOnlyIPv4->isChecked();//只显示IPv4
if (show)
show=(QAbstractSocket::IPv4Protocol==aHost.protocol()); //协议类型,
else
show=true;
if (show) {
ui->plainTextEdit->appendPlainText("协 议:"+protocolName(aHost.protocol()));//协议类型
ui->plainTextEdit->appendPlainText("本机IP地址:"+aHost.toString()); //IP地址
ui->plainTextEdit->appendPlainText("");
}
}
}
void Dialog::on_btnDetail_clicked()
{
QList<QHostAddress> addList=QNetworkInterface::allAddresses();//
if (!addList.isEmpty())
for (int i=0;i<addList.count();i++)
{
QHostAddress aHost=addList.at(i);
bool show=ui->chkOnlyIPv4->isChecked();//只显示IPv4
if (show)
show=QAbstractSocket::IPv4Protocol==aHost.protocol();
else
show=true;
if (show)
{
ui->plainTextEdit->appendPlainText("协 议:"+protocolName(aHost.protocol()));
ui->plainTextEdit->appendPlainText("IP地址:"+aHost.toString());
ui->plainTextEdit->appendPlainText("");
}
}
}
void Dialog::on_btnLookup_clicked()
{//查找主机信息
QString hostname=ui->editHost->text(); //主机名
ui->plainTextEdit->appendPlainText("正在查找查找主机信息:"+hostname);
QHostInfo::lookupHost(hostname,this,SLOT(lookedUpHostInfo(QHostInfo)));
}
void Dialog::on_btnALLInterface_clicked()
{//QNetworkInterface::allInterfaces()函数的使用
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()+"\n");
}
ui->plainTextEdit->appendPlainText("\n");
}
}
QString Dialog::protocolName(QAbstractSocket::NetworkLayerProtocol protocol)
{//通过协议类型返回协议名称
switch(protocol)
{
case QAbstractSocket::IPv4Protocol:
return "IPv4 Protocol";
case QAbstractSocket::IPv6Protocol:
return "IPv6 Protocol";
case QAbstractSocket::AnyIPProtocol:
return "Any IP Protocol";
default:
return "Unknown Network Layer Protocol";
}
}
void Dialog::on_btnClear_clicked()
{
ui->plainTextEdit->clear();
}
三.测试结果
1.获取本机主机名和IP
2.获取所有IP地址
3.获取所有接口
4.查找域名的ip地址
相关文章:

QT网络编程之获取本机网络信息
一.概述 查询一个主机的MAC地址或者IP地址是网络应用中常用到的功能,Qt提供了QHostInfo和QNetworkInterface 类可以用于此类信息的查询 1.QHostInfo 类(显示和查找本地的信息) 2.QNetworkInterface 类(获得应用程序上所在主机的…...

离线安装docker、docker-compose、Mysql镜像
离线安装docker docker-compose mysql镜像 一、下载docker docker-compose mysql 镜像文件 1、首先下载docker镜像 博主所用文件版本号: docker-23.0.6.tgz 下载docker 地址 :https://blog.csdn.net/xiaohanshasha/article/details/135489623?spm1001…...

Redis系列学习文章分享---第九篇(Redis快速入门之好友关注--关注和取关 -共同关注 -Feed流实现方案分析 -推送到粉丝收件箱 -滚动分页查询)
Redis的实战篇-好友关注 目录 好友关注-关注和取关好友关注-共同关注好友关注-Feed流实现方案分析好友关注-推送到粉丝收件箱好友关注-滚动分页查询收件箱的思路好友关注-实现滚动分页查询 1. 好友关注-关注和取关 1.1 概述 在好友关注系统中,用户可以关注其他用…...

数据库基本介绍及编译安装mysql
目录 数据库介绍 数据库类型 数据库管理系统(DBMS) 数据库系统 DBMS的工作模式 关系型数据库的优缺点 编译安装mysql 数据库介绍 数据:描述事物的的符号纪录称为数据(Data) 表:以行和列的形式组成…...

代码随想录算法训练营第55天 | 583. 两个字符串的删除操作, 72. 编辑距离
动态规划章节理论基础: https://programmercarl.com/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 583. 两个字符串的删除操作 题目链接:https://leetcode.cn/problems/delete-operation-for-two-strings/descrip…...
Guava之EventBus源码分析
简介 事件总线。 有助于深入理解代码的功能和实现细节。 可以了解代码背后的逻辑、算法、数据结构和设计模式等方面,从而更好地理解代码的作用和功能。 可以学习到业界的最佳实践和设计模式。 这有助于提高自己的编程水平,使你能够编写更高质量、可…...
Spark on Yarn安装配置
目录 前言 初了解spark Standalone模式 Yarn模式 前言 今天我们讲解Spark的安装配置,spark的部署分为两种,一种是Standalone模式,另一种就是on yarn 模式,我们这一节着重讲解on yarn 模式,因为符合生产活动&#…...
Debezium日常分享系列之:Debezium 2.5.3.Final发布
Debezium日常分享系列之:Debezium 2.5.3.Final发布 一、重大改变1.SQL Server 二、改进和变化1.Debezium 服务器的 TRACE 级别日志记录2.Informix 将 LSN 附加到事务标识符3.PostgreSQL 改进 三、Debezium技术总结 一、重大改变 1.SQL Server 首次部署连接器时&am…...

elment-ui el-tabs组件 每次点击后 created方法都会执行2次
先看错误的 日志打印: 错误的代码如下: 正确的日志打印: 正确的代码如下: 前言: 在element-ui的tabs组件中,我们发现每次切换页面,所有的子组件都会重新渲染一次。当子页面需要发送数据请求并且子页面过多时,这样会过多的占用网络资源。这里我们可以使用 v-if 来进行…...

sheng的学习笔记-AI-Network in Network(NIN)和1*1卷积
目录:sheng的学习笔记-AI目录-CSDN博客 简介 Network In Network 是发表于 2014 年 ICLR 的一篇 paper。当前被引了 3298 次。这篇文章采用较少参数就取得了 Alexnet 的效果,Alexnet 参数大小为 230M,而 Network In Network 仅为 29M&#x…...

【靶机测试--PHOTOGRAPHER: 1【php提权】】
前期准备 靶机下载地址: https://vulnhub.com/entry/photographer-1%2C519/ 信息收集 nmap 扫描同网段 ┌──(root㉿kali)-[/home/test/桌面] └─# nmap -sP 192.168.47.0/24 --min-rate 3333 Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-19 07:37 …...

LeetCode每日一题——删除有序数组中的重复项
删除有序数组中的重复项OJ链接:26. 删除有序数组中的重复项 - 力扣(LeetCode) 题目: 思路: 题目要求每个数只能出现一次,然后返回新数组的长度。仔细一看,其实与我们之前的移除元素那道题十分…...

元宇宙VR数字化艺术展降低办展成本
元宇宙AI时代已经来临,越来越多人期待在元宇宙数字空间搭建一个属于自己的虚拟展厅,元宇宙虚拟展厅搭建平台是VR公司深圳华锐视点为企业研发的可编辑工具,那么元宇宙虚拟展厅搭建平台有哪些新突破? 元宇宙虚拟展厅搭建平台采用了先进的web3D…...

聚类分析 | Matlab实现基于PCA+DBO+K-means的数据聚类可视化
聚类分析 | Matlab实现基于PCADBOK-means的数据聚类可视化 目录 聚类分析 | Matlab实现基于PCADBOK-means的数据聚类可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 PCA(主成分分析)、DBO(蜣螂优化算法)和K-means聚类…...

使用 git 先提交后拉取的时候远程分支不允许问题
问题场景 修改本地代码使用 git 先提交后拉取的时候远程分支不允许的问题 修改本地代码时,远程分支存在其他新提交先执行了 git commit -m xxx update然后再执行 git pull 拉取远程分支代码,出现如下提示 hint: You have divergent branches and need…...
Unity 创建快捷方式开机自动启动
Unity 创建快捷方式自动启动 🌭食用方法 🌭食用方法 先导入插件包👈,再 把导入的ZYF_AutoRunApp.cs 挂到物体上即可。 using System; using System.Collections; using System.Collections.Generic; using System.IO; using Uni…...
什么是docker(docker客户端、镜像、容器、仓库)
一、docker Docker 是一个开源的容器化平台,它可以让开发者打包应用程序及其依赖项成为一个轻量级、可移植的容器,然后在任何环境中运行。Docker 容器将应用程序及其依赖项打包到一个标准化单元中,包括代码、运行时环境、系统工具、系统库等…...

[Python人工智能] 四十三.命名实体识别 (4)利用bert4keras构建Bert+BiLSTM-CRF实体识别模型
从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前文讲解如何实现中文命名实体识别研究,构建BiGRU-CRF模型实现。这篇文章将继续以中文语料为主,介绍融合Bert的实体识别研究,使用bert4keras和kears包来构建Bert+BiLSTM-CRF模型。然而,该代码最终结…...
Android Framework开发之Linux +Vim命令
一、linux常用命令 在Android源码开发中,Linux命令的运用是至关重要的。这些命令不仅帮助开发者有效管理文件、目录和系统资源,还能在源码编译、调试和排错过程中发挥关键作用。以下是对Android源码开发中常用Linux命令的更详细介绍: 当然可…...

MySQL 索引的10 个核心要点
文章目录 🍉1. 索引底层采用什么数据结构?为什么不用hash🍉2. B树与B树区别?为何用B树?🍉3. 自增主键理解?🍉4. 为什么自增主键不连续🍉5. Innodb为什么推荐用自增ID&…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...