C++ 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地址获取,输出效果如下图所示;

C++ Qt开发:QHostInfo主机地址查询组件的更多相关文章
- SNF快速开发平台MVC-高级查询组件
1. 高级查询 在我们做项目的时候经常想要按名称.编号进行查询数据,可在开发时会把最常用的查询条件写上,不常用的就不写了,也是因为把所有字段都写上太多了,布局不好看而且不实用.还有些查询条件几百年 ...
- SNF快速开发平台MVC-自由排序组件
1. 自由排序功能使用 在一些需要排序优先级的数据进行调整处理,如民族数据,在北方实施的时候汉族比较多,希望把汉族放在第一位.在蒙古实施项目时,蒙古族人最多把蒙古族放在第一选择位. 1.1. ...
- 微信小程序开发-IP地址查询-例子
微信小程序开发 小程序搜索框 IP地址查询 搜索查询 样例 微信小程序 开发 参考 https://mp.weixin.qq.com/debug/wxadoc/dev/component/ ...
- Qt大型工程开发技术选型Part3:Qt调用C#编写的COM组件实例
Qt大型工程开发技术选型Part3:Qt调用C#编写的COM组件实例以及错误总结 ok,前面铺垫了那么多,现在来写一个开发实例,我会把其中隐藏的坑和陷阱简单谈谈,并在文章最后总结. 不愿意看长篇大论的 ...
- Qt之QHostInfo
简述 QHostInfo 类为主机名查找提供了静态函数. QHostInfo 利用操作系统提供的查询机制来查询与特定主机名相关联的主机的 IP 地址,或者与一个IP地址相关联的主机名.这个类提供了两个 ...
- 【应用笔记】【AN005】Qt开发环境下基于RS485的4-20mA电流采集
简介 4-20mA电流环具有广泛的应用前景,在许多行业中都发挥着重要作用.本文主要介绍在Qt开发环境下基于RS485实现4-20mA电流采集,实现WINDOWS平台对数据的采集.分析及显示. 系统组成 ...
- QT开发环境的建立以及QTE4.6.3、tslib1.4的移植过程
1.首先是建立Linux开发环境1.1.在windowsXP下安装博创公司提供的虚拟机软件VMware Workstation,版本为VMware-workstation-full-7.0.1-227 ...
- win使用MSYS2安装Qt开发环境
原文链接 MSYS2 下载地址: pacman的具体用法 有pacman的具体使用方法.我们首先对系统升级 我们首先对系统升级 pacman -Syu 就会检测整个系统可以升级的组件,并自动下载安装, ...
- QT开发环境搭建
一.Qt发展史 1991年,由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架: 2008年,Nokia从Trolltech公司收购Qt, 并增加LGPL的授权模式: 2011年,Digia从N ...
- Qt开发北斗定位系统融合百度地图API及Qt程序打包发布
Qt开发北斗定位系统融合百度地图API及Qt程序打包发布 1.上位机介绍 最近有个接了一个小型项目,内容很简单,就是解析北斗GPS的串口数据然后输出经纬度,但接过来觉得太简单,就发挥了主观能动性,增加 ...
随机推荐
- ChatGenTitle:使用百万arXiv论文信息在LLaMA模型上进行微调的论文题目生成模型
ChatGenTitle:使用百万arXiv论文信息在LLaMA模型上进行微调的论文题目生成模型 相关信息 1.训练数据集在Cornell-University/arxiv,可以直接使用: 2.正式发 ...
- Linux的进程管理 [补档-2023-07-25]
Linux进程管理 9-1并发与并行: 并发:在同一个cpu上,并且在一个时间段时,同时运行多个程序.比如在1000毫秒内,我们有5个程 序需要执行,所以我们可以将1000毫秒分为5个200毫秒, ...
- [Java] 解析Xml配置文件
1.解析方法 import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;impo ...
- C#合成图片显示不全
现象 前段时间用C#写了一个小工具,主要功能是随机读取图片并合成一张长图.最近在使用的时候发现个问题,原图片宽度是1080,合成后的图片宽度也是1080,但是合成后的图片没有显示全,就像下面这样 原图 ...
- Windows安装MongoDB6.0.2
环境 Windows 10 MongoDB 6.0.2 配置 下载mongodb 下载地址:https://www.mongodb.com/try/download/community 安装 指定目录 ...
- (C语言)每日代码||2023.12.27||关于(++i)+(++i)以及(++i)+(i = 100)
#include <stdio.h> int main() { int i = 1; int a = (++i) + (++i); printf("a = %d,i = %d\n ...
- Linux-解决jps查看正在运行的Java进程时显示:process information unavailable 问题
背景:jps全称为Java Virtual Machine Process Status Tool,是Java提供的一个查看当前用户有权访问的主机的Java进程情况的工具. 因为每一个Java程序都会 ...
- NC22598 Rinne Loves Edges
题目链接 题目 题目描述 Rinne 最近了解了如何快速维护可支持插入边删除边的图,并且高效的回答一下奇妙的询问. 她现在拿到了一个 n 个节点 m 条边的无向连通图,每条边有一个边权 \(w_i\) ...
- 阿里OSS+PicGo+Typora图床设置使用
1.首先下载Typroa和PicGo Typroa地址: 链接:https://pan.baidu.com/s/1M6_5o1PZyaGqOhSb4yvtmA 提取码:a1aj PicGo地址: 链接 ...
- wordpress设置固定链接404及伪静态配置
说明 最近在将wordpress设置中文章url修改为月份和名称型 之后访问文章出现404.原因是配有配置好apache的伪静态. 配置步骤 1.修改httpd.conf 我这里是centos7,默认 ...