Qt之QHostInfo获取主机信息

简介:

简述

Qt中提供了几个用于获取主机网络信息的类,包括:QHostInfo、QHostAddress、QNetworkInterface以及QNetworkAddress。

QHostInfo类提供了一系列用于主机名查询的静态函数。

QHostInfo利用操作系统提供的查询机制来查询与特定主机名相关联的主机的IP地址,或者与一个IP地址相关联的主机名。这个类提供了两个静态的便利函数:一个以异步方式工作,一旦找到主机就发射一个信号;另一个以阻塞方式工作,并且最终返回一个QHostInfo对象。

要使用异步方式查询主机的IP地址,调用lookupHost()即可,该函数包含3个参数,依次是主机名/IP地址、接收的对象、接收的槽函数,并返回一个查询ID。可以通过调用以查询ID为参数的abortHostLookup()方法的来中止查询。

当获得查询结果后就会调用槽函数。查询结果被存储到QHostInfo对象中。可通过调用addresses()方法来获得主机的IP地址列表,同时可通过调用hostName()方法来获得查询的主机名。

如果查询失败,error()返回发生错误的类型,errorString()返回一个能够读懂的查询错误描述。

获取本机主机名

QString strLocalHostName = QHostInfo::localHostName();
qDebug() << "Local Host Name:" << strLocalHostName;

输出结果:
Local Host Name:”Wang-PC”

异步方式

获取IP

QHostInfo::lookupHost("qt-project.org", this, SLOT(lookedUp(QHostInfo)));

void MainWindow::lookedUp(const QHostInfo &host)
{
    if (host.error() != QHostInfo::NoError) {
        qDebug() << "Lookup failed:" << host.errorString();
        return;
    }

    foreach (const QHostAddress &address, host.addresses()) {
        // 输出IPV4、IPv6地址
        if (address.protocol() == QAbstractSocket::IPv4Protocol)
            qDebug() << "Found IPv4 address:" << address.toString();
        else if (address.protocol() == QAbstractSocket::IPv6Protocol)
            qDebug() << "Found IPv6 address:" << address.toString();
        else
            qDebug() << "Found other address:" << address.toString();
    }
}

输出结果:
Found IPv4 address: “5.254.113.102”
Found IPv4 address: “178.32.152.214”

获取主机名

QHostInfo::lookupHost("5.254.113.102", this, SLOT(lookedUp(QHostInfo)));

void MainWindow::lookedUp(const QHostInfo &host)
{
    if (host.error() != QHostInfo::NoError) {
        qDebug() << "Lookup failed:" << host.errorString();
        return;
    }

    qDebug() << "Found hostName:" << host.hostName();
}

输出结果:
Found hostName: “webredirects.cloudns.net”

阻塞方式

QHostInfo host = QHostInfo::fromName("5.254.113.102");
if (host.error() != QHostInfo::NoError) {
    qDebug() << "Lookup failed:" << host.errorString();
    return;
}

qDebug() << "Found hostName:" << host.hostName();

输出结果:
Found hostName: “webredirects.cloudns.net”

错误处理

如上所述,查询失败,可以通过error()返回的错误类型HostInfoError来判断,其包含三个值:

常量 描述
QHostInfo::NoError 0 查找成功
QHostInfo::HostNotFound 1 没有发现主机对应的IP地址
QHostInfo::UnknownError 2 未知错误
相关文章
|
7月前
|
监控 前端开发 JavaScript
Qt Quick调试之道:跟踪、输出与打印信息的全面攻略
Qt Quick调试之道:跟踪、输出与打印信息的全面攻略
351 0
|
4月前
【qt】如何读取文件并拆分信息?
【qt】如何读取文件并拆分信息?
39 0
|
4月前
|
网络协议
【qt】TCP客户端信息的接受和发送
【qt】TCP客户端信息的接受和发送
34 0
|
4月前
|
网络协议
【qt】TCP 服务端怎么收到信息?
【qt】TCP 服务端怎么收到信息?
46 0
|
4月前
|
数据安全/隐私保护
【qt】获取主机信息系统
【qt】获取主机信息系统
18 0
|
4月前
|
容器
【qt】如何获取网卡的信息?
【qt】如何获取网卡的信息?
57 0
|
7月前
|
监控 算法 安全
【Qt 应用开发】Qt 中的信息输出机制:QDebug、QInfo、QWarning、QCritical 的简单介绍和用法
【Qt 应用开发】Qt 中的信息输出机制:QDebug、QInfo、QWarning、QCritical 的简单介绍和用法
844 1
|
7月前
qt开发使用camera类获取摄像头信息并拍照保存
qt开发使用camera类获取摄像头信息并拍照保存
222 0
|
7月前
|
C++
Qt定义属性类信息报错‘Qstring‘ was not declared in this scope; did you mean ‘xxx‘?并且还有有一堆报错,问题还出现在moc文件
Qt定义属性类信息报错‘Qstring‘ was not declared in this scope; did you mean ‘xxx‘?并且还有有一堆报错,问题还出现在moc文件
113 0
|
5月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
190 1
Qt(C++)开发一款图片防盗用水印制作小工具