Qt开发QHostInfo主机地址查询组件

Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QHostInfo组件实现对主机地址查询功能。

在Qt网络编程中,QHostInfo是一个强大而灵活的组件,用于获取有关主机的信息,包括主机名、IP地址和域名解析等。通过支持异步查询的机制,它能够在后台获取主机信息,避免阻塞主线程,同时通过信号-槽机制提供查询结果。其多主机查询、可靠的错误处理和与网络环境的适应性,使其成为处理网络应用中主机信息获取的理想选择。

以下是QHostInfo类的一些常用函数的解释:

函数描述
QHostInfo()默认构造函数,创建一个空的QHostInfo对象。
QHostInfo(const QHostInfo &other)拷贝构造函数,根据给定的other对象创建一个新的对象。
QHostInfo &operator=(const QHostInfo &other)赋值运算符,将other对象的值赋给当前对象。
QHostInfo &swap(QHostInfo &other)交换两个QHostInfo对象的值。
bool isNull() const判断QHostInfo对象是否为空,即未进行任何查询。
bool isComplete() const判断查询是否完成,返回true表示查询已完成,false表示正在进行中。
QList<QHostAddress> addresses() const返回与主机相关联的IP地址列表。
QString hostName() const返回主机的名称。
QStringList aliases() const返回主机的别名列表。
QHostInfo::Error error() const返回查询时发生的错误。
QString errorString() const返回与错误代码对应的人类可读的错误字符串。
static QHostInfo fromName(const QString &name)根据主机名创建QHostInfo对象。
static QHostInfo fromAddress(const QHostAddress &address)根据IP地址创建QHostInfo对象。
static QHostInfo localHostName()返回本地主机的QHostInfo对象。
void clear()清空QHostInfo对象,重置为初始状态。
static void swap(QHostInfo &first, QHostInfo &second)交换两个QHostInfo对象的值。

这些函数提供了对主机信息的查询、获取和处理的操作。需要注意,很多函数都是通过异步查询的方式获取主机信息的,因此在使用时需要通过信号-槽机制来获取查询结果。

在使用这个模块时,要确保导入QT+=network模块,接着来看该如何实现查询本机IP地址,通过调用QHostInfo::localHostName可以直接获取到本机的主机名,调用QHostInfo::fromName(hostName)可将该主机名转换为对应的HostInfo结构,当具备了这个结构体以后,就可以通过循环遍历addList.count()内的所有记录,并aHost.toString()输出所有的IP地址表,代码如下所示;

// 查询本机IP地址
void MainWindow::on_pushButton_clicked()
{
    // 本地主机名
    QString hostName=QHostInfo::localHostName();
    std::cout << hostName.toStdString() << std::endl;
    ui->lineEdit->setText(hostName);

    // 查询主机IP地址信息
    QHostInfo hostInfo=QHostInfo::fromName(hostName);

    QList<QHostAddress> addList=hostInfo.addresses();
    if (!addList.isEmpty())
    for (int i=0;i<addList.count();i++)
    {
        // 每一项是一个QHostAddress
        QHostAddress aHost=addList.at(i);

        // 判断是否为IPV4
        if(QAbstractSocket::IPv4Protocol==aHost.protocol())
        {
            ui->listWidget->addItem("IPV4 | " + aHost.toString());
        }
        else
        {
            ui->listWidget->addItem("IPV6 | " + aHost.toString());
        }
    }
}

运行后读者可通过点击查询数据按钮实现对本机IP地址的获取,输出效果如下图所示;

QHostInfo组件既可以查询自身IP地址信息,也可以实现对特定域名的IP解析,通过使用QHostInfo::lookupHost则可以实现查询特定主机的地址信息,该函数需要传入一个回调,如下所示我们在回调函数内查询主机所有的IP地址并输出,其实现原理与上述方法相同。

void MainWindow::lookedUpHostInfo(const QHostInfo &host)
{
    // 每一项是一个QHostAddress
    QList<QHostAddress> addList=host.addresses();
    if (!addList.isEmpty())
    for (int i=0;i<addList.count();i++)
    {
        QHostAddress aHost=addList.at(i);

        // 判断是否为IPV4
        if(QAbstractSocket::IPv4Protocol==aHost.protocol())
        {
            ui->listWidget_2->addItem("IPV4 | " + aHost.toString());
        }
        else
        {
            ui->listWidget_2->addItem("IPV6 | " + aHost.toString());
        }
    }
}

在查询时只需要通过lookupHost调用即可,如下代码所示;

void MainWindow::on_pushButton_2_clicked()
{
    // 主机名
    QString hostname=ui->lineEdit_2->text();
    QHostInfo::lookupHost(hostname,this,SLOT(lookedUpHostInfo(QHostInfo)));
}

运行后读者可通过点击查询数据按钮实现对特定域名的IP地址获取,输出效果如下图所示;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IP地址:现代网络通信的基础

IP地址&#xff08;Internet Protocol Address&#xff09;是指互联网协议地址&#xff0c;又译为网际协议地址。它是IP协议提供的一种统一的地址格式&#xff0c;为互联网上的每一个网络和每一台主机分配一个逻辑地址&#xff0c;以此来屏蔽物理地址的差异。这种地址形式使得互…

第九篇 – 过程发现(Process Discovery)是如何赋能数字化市场营销全过程?- 我为什么要翻译介绍美国人工智能科技巨头IAB公司

IAB平台&#xff0c;使命和功能 IAB成立于1996年&#xff0c;总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司&#xff0c;互动广告局&#xff08;IAB- the Interactive Advertising Bureau&#xff09;自1996年成立以来&#xff0c;先后为700多家媒体…

【Python】成功解决AttributeError: ‘MyClass‘ object has no attribute ‘my_attribute‘

【Python】成功解决AttributeError: ‘MyClass’ object has no attribute ‘my_attribute’ &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门…

魅力女神节•巾帼绽芳华 | 联诚发开展三八国际妇女节慰问活动

为进一步丰富女职工精神文化生活&#xff0c;展现新时代巾帼风采&#xff0c;弘扬积极向上、奋勇争先的精神风貌。3月8日&#xff0c;联诚发LCF开展了三八妇女节慰问活动&#xff0c;为全体女职工送上温馨的祝福和节日的问候。 清晨&#xff0c;活动现场便已经装饰一新&#xf…

【kerberos】hadoop集群使用keytab认证的逻辑

一、背景&#xff1a; haoop的kerberos认证核心是org.apache.hadoop.security.UserGroupInformation类。 UserGroupInformation一般有两种&#xff1a;&#xff08;1&#xff09;apache原生的&#xff08;2&#xff09;cdh hdp改良过的&#xff0c;即cloudera改良过的。 由此衍…

基于SpringBoot校园失物招领系统的设计与实现(程序+数据库+文档)

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一、研究背景…

Linux操作系统的vim常用命令和vim 键盘图

在vi编辑器的命令模式下&#xff0c;命令的组成格式是&#xff1a;nnc。其中&#xff0c;字符c是命令&#xff0c;nn是整数值&#xff0c;它表示该命令将重复执行nn次&#xff0c;如果不给出重复次数的nn值&#xff0c;则命令将只执行一次。例如&#xff0c;在命令模式下按j键表…

RabbitMQ篇

1.初始MQ 1.1. 同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得到响应&#xff0c;…

计算机网络——23网络层导论

网络层导论 网络层服务 在发送主机和接收主机对之间传送段&#xff08;segment&#xff09;在发送端将段封装到数据报中在接收端&#xff0c;将段上交给传输层实体网络层协议存在于每一个主机和路由器路由器检查每一个经过它的IP数据报的头部 网络层的关键功能 网络层功能 …

探秘WiFi 6技术:特性与优势解析

随着科技的飞速发展&#xff0c;无线网络技术也在不断演进&#xff0c;WiFi 6&#xff08;802.11ax&#xff09;作为最新一代的无线网络标准&#xff0c;正逐渐成为新一轮技术革新的引领者。本文将深入探讨WiFi 6模块的特性和优势&#xff0c;揭示其在无线通信领域的巨大潜力。…

(3)应用与信息

文章目录 前言 3.1 FlightDeck FrSky发射器应用程序 3.2 MAVLink2数据包签名(安全) 3.3 MAVLink高延迟协议 3.4 无线地面站连接中继器 1 概述 2 组件 3 设置 3.5 遥测无线电区域条例 3.6 用于OpenTX的Yaapu遥测脚本 前言 FlightDeck FrSky Transmitter AppMAVLink2 …

sizeof和strlen的详细万字解读

sizeof和strlen的对比 sizeof不是函数 侧面证明sizeof不是函数 如果是函数 应该需要有括号 不能落下来 strlen 只针对字符串 包含头文件 string.h 并且这个是个函数 随机数值 sizeof里面有表达式的话 表达式里面是不参与计算的 下面的s求出的是4 就是因为是不参与计算的 不…

重学SpringBoot3-WebMvcConfigurer接口

重学SpringBoot3-WebMvcConfigurer接口 WebMvcConfigurer基本信息为什么WebMvcConfigurer能配置底层行为实现WebMvcConfigurer举例1. 自定义格式化器和转换器2. 添加拦截器3. 配置静态资源4. 配置视图控制器 上一篇文章对 SpringMVC 重要配置类—— WebMvcAutoConfiguration 类…

httprunner结合pytest的自动化框架结构

2. 项目结构 2.1. 初代项目结构 3. 用例结构 - pytest 3.1. 单接口用例结构 # NOTE: Generated By HttpRunner v4.3.5 # FROM: testcases\data\data_20240229_test.json from httprunner import HttpRunner, Config, Step, RunRequestclass TestCaseData20240229Test(HttpRu…

数据集生成 YOLOV5 可训练的数据目录、并且可视化

1、前言 YOLOV5 训练数据的目录结构如下&#xff1a; 如果有测试集的话&#xff0c;也按照下面目录摆放即可 注意&#xff1a;这里的图片和标签文件名要严格对应&#xff01;&#xff01;后缀除外 关于YOLOv5介绍或者yolo格式的介绍参考之前专栏&#xff0c; 2、划分数据生成…

WPF 消息提示 类似toast方式

WPF里面的消息提示一般都是MessageBox.Show()&#xff0c;这种样式不是很好看&#xff0c;所以就想办法重新搞了一个类似弹出消息的功能。原理很简单&#xff0c;就是弹出一个新窗体&#xff0c;然后等几秒窗体自动关闭。 先上效果图&#xff1a; 新建一个MsgHelper.cs类&…

神经网络 梯度与神经元参数w、b关系;梯度与导数关系

参考&#xff1a;https://blog.csdn.net/weixin_44259490/article/details/90295146 概念 梯度与w的关系可以用梯度下降公式来表示&#xff1a;ww−α ∂ c o s t ∂ w \frac{\partial cost}{\partial w} ∂w∂cost​&#xff0c;其中w表示网络的权重&#xff0c; ∂ c o s t…

AI 辅助研发趋势 - 动动嘴完成代码?

目录 2024 年 AI 辅助研发趋势 方向一&#xff1a;AI辅助研发的技术进展 方向二&#xff1a;行业应用案例 方向三&#xff1a; 面临的挑战与机遇 方向四&#xff1a;未来趋势预测 方向五&#xff1a;与法规的影响 方向六&#xff1a;人才培养与教育 2024 年 AI 辅助研发…

141 Linux 系统编程18 ,线程,线程实现原理,ps –Lf 进程 查看

一 线程概念 什么是线程 LWP&#xff1a;light weight process 轻量级的进程&#xff0c;本质仍是进程(在Linux环境下) 进程&#xff1a;独立地址空间&#xff0c;拥有PCB 线程&#xff1a;有独立的PCB&#xff0c;但没有独立的地址空间(共享) 区别&#xff1a;在于是否共…

CorelDRAW Essentials2024使用简单易学的图形软件,让设计充满乐趣

CorelDRAW Essentials 2024使用简单易学的图形软件&#xff0c;让设计充满乐趣 创作引人注目的海报、卡片、社交媒体图片等。 增强功能&#xff01;支持文件导入/导出新增功能&#xff01;支持 WebP 文件&#xff0c;提高网页兼容性并优化图像交付增强功能&#xff01;显著的…