获取本机网络信息,具体实现方法如下:
(1)头文件“networkinformation.h”的具体代码如下:
#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>
#include <QGridLayout>
#include <QMessageBox>
class NetworkInformation : public QWidget
{
Q_OBJECT
public:
NetworkInformation(QWidget *parent = 0);
~NetworkInformation();
private:
QLabel *hostLabel;
QLineEdit *LineEditLocalHostName;
QLabel *ipLabel;
QLineEdit *LineEditAddress;
QPushButton *detailBtn;
QGridLayout *mainLayout;
};
(2)源文件“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);
}
此时,运行结果如下图所示:
以上步骤完成了界面,下面开始真正实现获取本机网络信息的内容。
(1)在文件“NetworkInformation.pro”中添加如下代码:
QT += network
(2)在头文件“networkinformation.h”中添加如下代码:
#include <QHostInfo>
#include <QNetworkInterface>
public:
void getHostInformation();
public slots:
void slotDetail();
(3)在源文件“networkinformation.cpp”中添加代码。其中,在构造函数的最后添加:
getHostInformation();
connect(detailBtn,SIGNAL(clicked()),this,SLOT(slotDetail()));
getHostInformation()函数用于获取主机信息。具体实现代码如下:
void NetworkInformation::getHostInformation()
{
QString localHostName = QHostInfo::localHostName(); //获取本机主机名。QHostInfo提供了一 系列有关网络信息的静态函数,可以根据主机名获取分配的IP地址,也可以根据IP地址获取相应的 主机名
LineEditLocalHostName->setText(localHostName);
QHostInfo hostInfo = QHostInfo::fromName(localHostName); //根据主机名获取相关主机信息, 包括IP地址等。QHostInfo::fromName()函数通过主机名查找IP地址信息。
QList<QHostAddress> listAddress = hostInfo.addresses(); //获取主机的IP地址列表
if(!listAddress.isEmpty()) //获取的主机IP地址列表可能为空。在不为空的情况下使用第一 个IP地址
{
LineEditAddress->setText(listAddress.at(2).toString());
}
}
slotDetail()函数获取与网络接口相关的信息,具体实现代码如下:
void NetworkInformation::slotDetail()
{
QString detail="";
QList<QNetworkInterface> list=QNetworkInterface::allInterfaces(); //QNetwork Interface 类提供了一 个主机IP地址和网络接口的列表。
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(); //每个网络接口包括0个或多个IP地址,每个IP地址有选择性地与一个 子网掩码和(或)一个广播地址相关联。QNetworkAddressEntry类存储了被网络接口支持的一个IP地址, 同时还包括与之相关的子网掩码和广播地址
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);
}
运行结果如图所示:
点击”详细“后会弹出如下内容: