QT:获取本机网络信息

使用qt的hostInfo类,查看本机的IP和设备;

开发环境: WIN10+ QT5.14

创建桌面应用程序继承 QWidget 类, NetworkInformation.pro 项目

NetworkInformation.pro  项目文件中添加  network 引用 

QT       += core gui network

  

networkinformation.h

#ifndef NETWORKINFORMATION_H
#define NETWORKINFORMATION_H

#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>
#include <QGridLayout>
#include <QMessageBox>

// #include <QtNetwork/QNetworkInterface>
// #include <QtNetwork/QHostInfo>
// #include <QtNetwork>
#include <QNetworkInterface>
#include <QHostInfo>
#include <QNetworkAddressEntry>

class NetworkInformation : public QWidget
{
    Q_OBJECT

public:
    NetworkInformation(QWidget *parent = nullptr);
    ~NetworkInformation();

private:
    QLabel *hostLabel;
    QLineEdit *LineEditLocalHostName;
    QLabel *ipLabel;
    QLineEdit *LineEditAddress;
    QPushButton *detailBtn;
    QGridLayout *mainLayout;
public:
    void getHostInformation();

public slots:
    void slotDetail();
};
#endif // NETWORKINFORMATION_H

  

networkinformation.cpp

#include "networkinformation.h"

NetworkInformation::NetworkInformation(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()));
}

NetworkInformation::~NetworkInformation()
{

}

void NetworkInformation::getHostInformation()
{
    QString localHostName = QHostInfo::localHostName();
    LineEditLocalHostName->setText(localHostName);
    QHostInfo hostInfo = QHostInfo::fromName(localHostName);
    // 获取主机的IP地址列表
    QList<QHostAddress> listAddress = hostInfo.addresses();
    if(!listAddress.isEmpty())
    {
        QString ipList ="";
        for(int i=0;i<listAddress.count();i++)
        {
            ipList =ipList + listAddress.at(i).toString() +" # ";
        }
        LineEditAddress->setText(listAddress.at(7).toString());
       // LineEditAddress->setText(ipList);
       // QMessageBox::information(this,tr("IP地址:"),ipList);
    }
}

void NetworkInformation::slotDetail()
{
    QString detail = "";

    QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();
    for(int i=0; i<list.count(); i++)
    {
        QNetworkInterface interface = list.at(i);
        detail = detail +tr("设备:") + interface.name()+ "\n";
        detail = detail +tr("硬件地址:") + interface.hardwareAddress()+ "\n";
        QList<QNetworkAddressEntry> entryList = interface.addressEntries();
        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);
}

  

效果图:

image

 

使用qt的hostInfo类,查看本机的IP和设备

posted @ 2025-10-14 23:11  samrv  阅读(7)  评论(0)    收藏  举报