在网络应用中,经常需要获取本机主机名和IP地址和硬件地址等信息。运用QHostInfo、QNetworkInterface、QNetworkAddressEntry可以获得本机的网络信息。
这里需要注意的,在Qt5.80 VS的版本中,有的字符“:”中文版本的,会导致编译错误。
第一步,需要再pro文件中加入 QT+= network
.h文件
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QLabel> #include <QPushButton> #include <QLineEdit> #include <QGridLayout> #include <QMessageBox> #include <QHostInfo> #include <QNetworkInterface> class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = 0); ~Widget(); void getHostInformation(); public slots: void slotDetail(); private: QLabel *hostLabel; QLineEdit *LineEditLocalHostName; QLabel *ipLabel; QLineEdit *LineEditAddress; QPushButton *detailBtn; QGridLayout *mainLayout; }; #endif // WIDGET_H
.cpp文件
#include "widget.h" #include <QDebug> Widget::Widget(QWidget *parent) : QWidget(parent) { hostLabel = new QLabel(tr("主机名:")); LineEditLocalHostName = new QLineEdit; ipLabel = new QLabel(tr("IP 地址:")); LineEditAddress = new QLineEdit; detailBtn = new QPushButton(tr("详细")); mainLayout = new QGridLayout(this); mainLayout->addWidget(hostLabel,0,0); mainLayout->addWidget(LineEditLocalHostName,0,1); mainLayout->addWidget(ipLabel,1,0); mainLayout->addWidget(LineEditAddress,1,1); mainLayout->addWidget(detailBtn,2,0,1,2); getHostInformation(); connect(detailBtn,SIGNAL(clicked()),this,SLOT(slotDetail())); } Widget::~Widget() { } void Widget::getHostInformation() { QString localHostName = QHostInfo::localHostName(); LineEditLocalHostName->setText(localHostName); QHostInfo hostInfo = QHostInfo::fromName(localHostName); QList<QHostAddress> listAddress = hostInfo.addresses(); qDebug()<<listAddress; if(!listAddress.isEmpty()) { LineEditAddress->setText(listAddress.at(4).toString()); } } void Widget::slotDetail() { QString detail=""; QList<QNetworkInterface> list=QNetworkInterface::allInterfaces(); //(a) for(int i=0;i<list.count();i++) { QNetworkInterface interface=list.at(i); detail=detail+tr("设备:")+interface.name()+"\n"; //(b) detail=detail+tr("硬件地址:")+interface.hardwareAddress()+"\n"; //(c) QList<QNetworkAddressEntry> entryList=interface.addressEntries(); //(d) for(int j=1;j<entryList.count();j++) { QNetworkAddressEntry entry=entryList.at(j); detail=detail+"\t"+tr("IP 地址:")+entry.ip().toString()+"\n"; detail=detail+"\t"+tr("子网掩码:")+entry.netmask().toString() +"\n"; detail=detail+"\t"+tr("广播地址:")+entry.broadcast().toString() +"\n"; } } QMessageBox::information(this,tr("Detail"),detail); }
工程地址:https://gitee.com/DreamLife-Technology_DreamLife/NetworkInformation