qt 实现获取网络信息

最近做智慧农业的项目,在网络配置时要动态获取本机的IP地址以及子网掩码和DNS,研究了一段时间终于有结果

1.用到网络相关的类要在工程文件.pro里加入下面一句话,告诉编译器加入网络模块

QT       +=network

2,用到的Qt的类
QNetworkInterface :这个类会帮我们获取本机的所有网络接口,存储网络接口的名称以及物理地址等

QNetworkAddressEntry:可以帮我们存储网络接口的IP地址,子网掩码,以及广播地址等

一般将这两个类联合起来使用

 QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();
        //获取所有网络接口的列表
        foreach(QNetworkInterface interface,list)
        {  //遍历每一个网络接口
            qDebug() << "Device: "<<interface.name();
            //设备名
            qDebug() << "HardwareAddress:"<<interface.hardwareAddress();
            //硬件地址
            QList<QNetworkAddressEntry> entryList = interface.addressEntries();
         //获取IP地址条目列表,每个条目中包含一个IP地址,一个子网掩码和一个广播地址
            foreach(QNetworkAddressEntry entry,entryList)
            {//遍历每一个IP地址条目
                qDebug()<<"IP Address:"<<entry.ip().toString();
                //IP地址
                qDebug()<<"Netmask:"<<entry.netmask().toString();
                //子网掩码
                qDebug()<<"Broadcast:"<<entry.broadcast().toString();
                //广播地址
            }

       }

上面会把计算机中的各种接口信息打印出来,但我们准备在linux系统里获取wifi的网络地址怎么办,其实道理是一样的
3,

void networkWidget::getNetworkMsg()
{
    QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();
    foreach(QNetworkInterface interface,list)

    {  //遍历每一个网络接口
         qDebug() << "Device: "<<interface.name();
        //设备名
         qDebug() << "HardwareAddress:"<<interface.hardwareAddress();
        //硬件地址
         if(interface.name() == "wlan0")
         {
             QList<QNetworkAddressEntry> entryList = interface.addressEntries();
             ipAddrlineEdit->setText(entryList.first().ip().toString());
             subnetlineEdit->setText(entryList.first().netmask().toString());
             //ui->lineEdit_3->setText(entryList.first().broadcast().toString());
         }

     }
}

这样就获得我们想要的IP地址了。

原文地址:https://www.cnblogs.com/onlycxue/p/2834673.html