其他分享
首页 > 其他分享> > Qt中QHostInfo类的使用

Qt中QHostInfo类的使用

作者:互联网

Qt网络编程-主机信息查询


前言:

  查询一个主机的MAC地址或IP地址是网络应用程序中经常用到的功能,Qt提供了QHostInfo类QNetworkInterface类

可以用于此类信息的查询,完整代码见QT主机信息查询程序

运行效果图:
在这里插入图片描述

QHostInfo类

1.主要功能函数介绍(红色字体为本程序使用到)

类别函数原型作用
公共函数QList<QHostAddress> addresses()返回与主机hostName()关联的IP地址列表
公共函数HostInfoError error()如果主机查找失败,返回失败类型
公共函数QString errorString()如果主机查找失败,返回错误描述字符串
公共函数QString hostName()通过IP查找的主机的名称
公共函数int lookupId()返回本次查找的ID
静态函数void abortHostLookup(int id)根据id中断主机查找
静态函数QHostInfo fromName(QString &name)返回指定的主机名的IP地址
静态函数QString localDomainName()返回本机DNS域名
静态函数QString localHostName()返回本机主机名字
静态函数int lookupHost(QString& name,QObject* receiver,char* member)以异步的方式根据主机名查找主机的IP地址,并返回一个表示本次查找的额ID,可用于abortHostLookup()

2.QHostInfo的使用

1)显示本机地址信息

QString myWidget::protocolNmae(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 "Unkown Network Layer Protocol";
    }
}
void myWidget::on_btnGetHostInfo_clicked()
{
    //返回主机名
    QString hostname = QHostInfo::localHostName();
    ui->plainTextEdit->appendPlainText("本机名称:"+hostname);
    //问题,不影响程序
    //为什么这句编辑框出现乱码???????
    //ui->plainTextEdit->appendPlainText("本机主机名:"+hostname);

    //返回主机信息
    QHostInfo hostInfo = QHostInfo::fromName(hostname);
    //返回IP地址列表
    QList<QHostAddress> addList = hostInfo.addresses();
    //判断IP地址列表是否为空
    if(!addList.isEmpty())
    //遍历IP地址列表,输出主机信息
    for(int i=0;i<addList.count();i++)
    {
        QHostAddress aHost = addList.at(i);
        //输出IPV4信息
        if(ui->chkIPV4->isChecked()&&(QAbstractSocket::IPv4Protocol==aHost.protocol()))
        {
            ui->plainTextEdit->appendPlainText("协议: "+protocolNmae(aHost.protocol()));
            ui->plainTextEdit->appendPlainText("本机IPV4地址: "+aHost.toString());
            ui->plainTextEdit->appendPlainText("");
        }
        //输出IPV6信息
        if(ui->chkIPV6->isChecked()&&(QAbstractSocket::IPv6Protocol==aHost.protocol()))
        {
            ui->plainTextEdit->appendPlainText("协议: "+protocolNmae(aHost.protocol()));
            ui->plainTextEdit->appendPlainText("本机IPV6地址: "+aHost.toString());
            ui->plainTextEdit->appendPlainText("");
        }
    }
}

2)查找主机地址信息

void myWidget::on_btnLookUp_clicked()
{
    QString hostname = ui->lineEdit->text();
    ui->plainTextEdit->appendPlainText("正在查找主机信息:"+hostname);
    QHostInfo::lookupHost(hostname,this,SLOT(OnLookuphostinfo(QHostInfo)));
}
void myWidget::OnLookuphostinfo(const QHostInfo &host)
{
    //返回QHostInfo::NoError为查找成功
    if (host.error() != QHostInfo::NoError)
    {
       ui->plainTextEdit->appendPlainText("Lookup Failed:"+host.errorString());
            return;
    }
    //和上面遍历一样,用foreach()完成
    foreach(const QHostAddress &aHost,host.addresses())
    {
        if(ui->chkIPV4->isChecked()&&(QAbstractSocket::IPv4Protocol==aHost.protocol()))
        {
            ui->plainTextEdit->appendPlainText("协议: "+protocolNmae(aHost.protocol()));
            ui->plainTextEdit->appendPlainText("本机IPV4地址: "+aHost.toString());
            ui->plainTextEdit->appendPlainText("");
        }
        if(ui->chkIPV6->isChecked()&&(QAbstractSocket::IPv6Protocol==aHost.protocol()))
        {
            ui->plainTextEdit->appendPlainText("协议: "+protocolNmae(aHost.protocol()));
            ui->plainTextEdit->appendPlainText("本机IPV6地址: "+aHost.toString());
            ui->plainTextEdit->appendPlainText("");
        }
    }
}

Qt中NetworkInterface类的使用-待完成

标签:Qt,appendPlainText,主机,QHostInfo,ui,使用,plainTextEdit,aHost
来源: https://blog.csdn.net/qq_38211856/article/details/111706664