Qt-网络与通信-获取本机网络信息

举报
DreamLife 发表于 2022/04/14 22:48:27 2022/04/14
【摘要】 在网络应用中,经常需要获取本机主机名和IP地址和硬件地址等信息。运用QHostInfo、QNetworkInterface、QNetworkAddressEntry可以获得本机的网络信息。   上运行截图     这里需要注意的,在Qt5.80 VS的版本中,有的字符“:”中文版本的,会导致编...

在网络应用中,经常需要获取本机主机名和IP地址和硬件地址等信息。运用QHostInfo、QNetworkInterface、QNetworkAddressEntry可以获得本机的网络信息。

 

上运行截图

 

 

这里需要注意的,在Qt5.80 VS的版本中,有的字符“:”中文版本的,会导致编译错误。

第一步,需要再pro文件中加入 QT+= network

 

.h文件


  
  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3. #include <QWidget>
  4. #include <QLabel>
  5. #include <QPushButton>
  6. #include <QLineEdit>
  7. #include <QGridLayout>
  8. #include <QMessageBox>
  9. #include <QHostInfo>
  10. #include <QNetworkInterface>
  11. class Widget : public QWidget
  12. {
  13. Q_OBJECT
  14. public:
  15. Widget(QWidget *parent = 0);
  16. ~Widget();
  17. void getHostInformation();
  18. public slots:
  19. void slotDetail();
  20. private:
  21. QLabel *hostLabel;
  22. QLineEdit *LineEditLocalHostName;
  23. QLabel *ipLabel;
  24. QLineEdit *LineEditAddress;
  25. QPushButton *detailBtn;
  26. QGridLayout *mainLayout;
  27. };
  28. #endif // WIDGET_H

.cpp文件


  
  1. #include "widget.h"
  2. #include <QDebug>
  3. Widget::Widget(QWidget *parent)
  4. : QWidget(parent)
  5. {
  6. hostLabel = new QLabel(tr("主机名:"));
  7. LineEditLocalHostName = new QLineEdit;
  8. ipLabel = new QLabel(tr("IP 地址:"));
  9. LineEditAddress = new QLineEdit;
  10. detailBtn = new QPushButton(tr("详细"));
  11. mainLayout = new QGridLayout(this);
  12. mainLayout->addWidget(hostLabel,0,0);
  13. mainLayout->addWidget(LineEditLocalHostName,0,1);
  14. mainLayout->addWidget(ipLabel,1,0);
  15. mainLayout->addWidget(LineEditAddress,1,1);
  16. mainLayout->addWidget(detailBtn,2,0,1,2);
  17. getHostInformation();
  18. connect(detailBtn,SIGNAL(clicked()),this,SLOT(slotDetail()));
  19. }
  20. Widget::~Widget()
  21. {
  22. }
  23. void Widget::getHostInformation()
  24. {
  25. QString localHostName = QHostInfo::localHostName();
  26. LineEditLocalHostName->setText(localHostName);
  27. QHostInfo hostInfo = QHostInfo::fromName(localHostName);
  28. QList<QHostAddress> listAddress = hostInfo.addresses();
  29. qDebug()<<listAddress;
  30. if(!listAddress.isEmpty())
  31. {
  32. LineEditAddress->setText(listAddress.at(4).toString());
  33. }
  34. }
  35. void Widget::slotDetail()
  36. {
  37. QString detail="";
  38. QList<QNetworkInterface> list=QNetworkInterface::allInterfaces();
  39. //(a)
  40. for(int i=0;i<list.count();i++)
  41. {
  42. QNetworkInterface interface=list.at(i);
  43. detail=detail+tr("设备:")+interface.name()+"\n";
  44. //(b)
  45. detail=detail+tr("硬件地址:")+interface.hardwareAddress()+"\n";
  46. //(c)
  47. QList<QNetworkAddressEntry> entryList=interface.addressEntries();
  48. //(d)
  49. for(int j=1;j<entryList.count();j++)
  50. {
  51. QNetworkAddressEntry entry=entryList.at(j);
  52. detail=detail+"\t"+tr("IP 地址:")+entry.ip().toString()+"\n";
  53. detail=detail+"\t"+tr("子网掩码:")+entry.netmask().toString() +"\n";
  54. detail=detail+"\t"+tr("广播地址:")+entry.broadcast().toString() +"\n";
  55. }
  56. }
  57. QMessageBox::information(this,tr("Detail"),detail);
  58. }

 

工程地址:https://gitee.com/DreamLife-Technology_DreamLife/NetworkInformation

 

 

 

文章来源: dreamlife.blog.csdn.net,作者:DreamLife.,版权归原作者所有,如需转载,请联系作者。

原文链接:dreamlife.blog.csdn.net/article/details/79405220

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。