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地址了。