Qt获取本机地址

//widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>
#include <QGridLayout>
#include <QMessageBox>
#include <QNetworkInterface>
#include <QHostInfo>
class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();

    QLabel *hostLabel;
    QLineEdit *LineEditLocalHostName;
    QLabel *ipLabel;
    QLineEdit *LineEditAddress;
    QPushButton *detailBtn;
    QGridLayout *mainLayout;

    void getHostInformation();
public slots:
    void slotDetaili();
};

#endif // WIDGET_H

//widget.cpp

#include "widget.h"

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); //参数4:行款 参数6:列宽

    getHostInformation();
    connect(detailBtn,SIGNAL(clicked()),this,SLOT(slotDetaili()));
}

Widget::~Widget()
{

}
void Widget::getHostInformation()
{
    //获取本机主机名
    QString localHostName = QHostInfo::localHostName();
    LineEditLocalHostName->setText(localHostName);
    //根据主机名获取响应的信息
    QHostInfo hostInfo = QHostInfo::fromName(localHostName);
    QList<QHostAddress> listAddress = hostInfo.addresses();
    //获取的主机名不是空,使用第一主机名
    if(!listAddress.isEmpty())
    {
        LineEditAddress->setText(listAddress.at(2).toString());
    }
}

void Widget::slotDetaili()
{
    QString detail ="";
    //获取主机IP地址和网络接口列表
    QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();

    for(int  i = 0; i < list.count(); ++i)
    {
        QNetworkInterface interfacae = list.at(i);
        //获取网络接口名称
        detail = detail + tr("设备: ") + interfacae.name() + "\n";
        //获取网络接口硬件地址
        detail =  detail + tr("硬件地址: ") + interfacae.hardwareAddress() + "\n";
        //每个网络接口中有0到多个IP地址,每个IP有选择性的和一个子网掩码和广播地址关联
        QList<QNetworkAddressEntry> entryList = interfacae.addressEntries();

        for(int j = 0; 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);
}

//*.pro

添加一条:

QT += network
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章