Qt获取本地网络信息的实例

来源:互联网 发布:网络类购物号名字大全 编辑:程序博客网 时间:2024/04/30 14:21
获取本机网络信息主要涉及到Qt的QHostInfo类和QNetworkInterface类


在QtCreator中新建一个QtWidgetApplication,命名为“NetworkInfo”,继承自QWidget类,不需要自动生成ui文件。


networkinfo.h文件的具体代码如下:
#ifndef NETWORKINFO_H
#define NETWORKINFO_H


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


class NetworkInfo : public QWidget
{
Q_OBJECT


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


void getHostInfomation();


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


public slots:
void slotDetail();
};


#endif // NetworkInfo_H


networkinfo.cpp的具体代码如下:
#include "networkinfo.h"


NetworkInfo::NetworkInfo(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-&gt;addWidget(hostLabel, 0, 0);
mainLayout-&gt;addWidget(LineEditLocalHostName, 0, 1);
mainLayout-&gt;addWidget(ipLabel, 1, 0);
mainLayout-&gt;addWidget(LineEditAddress, 1, 1);
mainLayout-&gt;addWidget(detailBtn, 2, 0, 1, 2);


getHostInfomation();
connect(detailBtn, SIGNAL(clicked()), this, SLOT(slotDetail()));
}


NetworkInfo::~NetworkInfo()
{


}


void NetworkInfo::getHostInfomation(){
QString localHostName = QHostInfo::localHostName();
LineEditLocalHostName-&gt;setText(localHostName);


QHostInfo hostInfo = QHostInfo::fromName(localHostName);
QList listAddress = hostInfo.addresses();
if(!listAddress.isEmpty())
{
LineEditAddress-&gt;setText(listAddress.first().toString());
}
}


void NetworkInfo::slotDetail()
{
QString detail = "";
QList list = QNetworkInterface::allInterfaces();
for(int i=0;i&lt;list.count();i++)
{
QNetworkInterface ni = list.at(i);
detail = detail + tr("设备") + ni.name() + "\n";
detail = detail + tr("硬件地址:") + ni.hardwareAddress() + "\n";


QList entryList = ni.addressEntries();
for (int j = 0; j&lt;entryList.count();j++)
{
QNetworkAddressEntry nae = entryList.at(j);
detail = detail + tr("IP地址:") + nae.ip().toString() + "\n";
detail = detail + tr("子网掩码:") + nae.netmask().toString() + "\n";
detail = detail + tr("广播地址:") + nae.broadcast().toString() + "\n";
}
}
QMessageBox::information(this, tr("Detail"), detail);
}


main.cpp具体代码如下:
#include "networkinfo.h"
#include


int main(int argc, char *argv[])
{
QApplication a(argc, argv);
NetworkInfo ni;
ni.show();


return a.exec();
}


这样就实现了简单地获取本地网络信息的小程序。


&nbsp;
0 0