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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章