Qt QHostInfo详解

1.QHostInfo

主要用来查询主机信息,包括主机名,ip地址,DNS域名等信息。

以下常用静态方法

  • QHostInfo::localHostName():获取本机的主机名。
  • QHostInfo::fromName(QString &name):通过主机名获取IP地址。
  • QHostInfo::lookupHost():可以通过一个主机名,以异步方式查找这个主机的IP地址。
  • QHostInfo::localDomainName():返回本机DNS域名。

以下常用方法

  • QString hostName():返回通过IP查找的主机的名称。
  • int lookupId():返回本次查找的ID
  • QString errorString():返回主机查找失败,返回错误描述的字符串。

2.示例

获取本机的主机信息和获取百度域名信息

Qt QHostInfo详解

//.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QHostInfo>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

    QString protocolName(QAbstractSocket::NetworkLayerProtocol protocol);

private slots:
    void on_btnGetHostInfo_clicked();

    void on_btnGetIp_clicked();

    void on_btnClear_clicked();

    void on_lookUpHostInfo(const QHostInfo&);

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H
//.cpp
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

QString Widget::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 Widget::on_btnGetHostInfo_clicked()
{
    //本地主机名
    QString hostName = QHostInfo::localHostName();
    ui->plainTextEdit->appendPlainText("本地主机名: "+ hostName + "\n");

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

    //IP地址列表
    QList<QHostAddress> addrList = hostInfo.addresses();
    for(int i=0;i<addrList.count();i++)
    {
        QHostAddress host = addrList.at(i);

        bool isShow = ui->checkBox->isChecked();
        if(isShow)
            isShow = (QAbstractSocket::IPv4Protocol == host.protocol()); //IPv4协议
        else
            isShow = true;
        if(isShow)
        {
            ui->plainTextEdit->appendPlainText("协议: "+protocolName(host.protocol()));
            ui->plainTextEdit->appendPlainText("本机IP地址: "+host.toString());
            ui->plainTextEdit->appendPlainText("");
        }
    }
}

void Widget::on_btnGetIp_clicked()
{
    //主机名
    QString hostName = ui->lineEdit->text();

    ui->plainTextEdit->appendPlainText("正在查询主机信息: "+ hostName);
    QHostInfo::lookupHost(hostName,this,SLOT(on_lookUpHostInfo(QHostInfo)));
}

void Widget::on_btnClear_clicked()
{
    ui->plainTextEdit->clear();
}

void Widget::on_lookUpHostInfo(const QHostInfo &host)
{
    //IP地址列表
    QList<QHostAddress> addrList = host.addresses();
    for(int i=0;i<addrList.count();i++)
    {
        QHostAddress host = addrList.at(i);

        bool isShow = ui->checkBox->isChecked();
        if(isShow)
            isShow = (QAbstractSocket::IPv4Protocol == host.protocol()); //IPv4协议
        else
            isShow = true;
        if(isShow)
        {
            ui->plainTextEdit->appendPlainText("协议: "+protocolName(host.protocol()));
            ui->plainTextEdit->appendPlainText("本机IP地址: "+host.toString());
            ui->plainTextEdit->appendPlainText("");
        }
    }
}

 

上一篇:8 Vue - 总结


下一篇:m4a文件格式分析