QT学习:获取本机网络信息

获取本机网络信息,具体实现方法如下:
(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); 
}

运行结果如图所示:
在这里插入图片描述
点击”详细“后会弹出如下内容:
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值