代码

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPushButton>
#include <QTextBrowser>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QTimer>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();

private:
Ui::MainWindow *ui;
/* 点击获取和清空文本按钮 */
QPushButton *pushButton[2];

/* 文本浏览框用于显示本机的信息 */
QTextBrowser *textBrowser;
/* 水平 Widget 容器和垂直 Widget 容器*/
QWidget *hWidget;
QWidget *vWidget;

/* 水平布局和垂直布局 */
QHBoxLayout *hBoxLayout;
QVBoxLayout *vBoxLayout;

/* 定时器 */
QTimer *timer;

/* 获取本机的网络的信息,返回类型是 QString */
QString getHostInfo();

private slots:
/* 定时器槽函数,点击按钮后定时触发 */
void timerTimeOut();

/* 显示本机信息 */
void showHostInfo();

/* 启动定时器 */
void timerStart();

/* 清空 textBrowser 的信息 */
void clearHostInfo();
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QNetworkInterface>
#include <QHostInfo>
#include <QThread>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
/* 设置位置与大小 */
this->setGeometry(0, 0, 800, 480);

/* 点击获取本地信息按钮和清空文本按钮 */
pushButton[0] = new QPushButton();
pushButton[1] = new QPushButton();

pushButton[0]->setText("获取本机信息");
pushButton[1]->setText("清空文本信息");

/* 按钮的大小根据文本自适应,
* 注意 setSizePolicy 需要在布局中使用 */
pushButton[0]->setSizePolicy(QSizePolicy::Fixed,
QSizePolicy::Fixed);
pushButton[1]->setSizePolicy(QSizePolicy::Fixed,
QSizePolicy::Fixed);

/* 水平 Widget 和垂直 Widget 用于添加布局 */
hWidget = new QWidget();
vWidget = new QWidget();

/* 水平布局和垂直布局 */
hBoxLayout = new QHBoxLayout();
vBoxLayout = new QVBoxLayout();

/* 文本浏览框 */
textBrowser = new QTextBrowser();

/* 添加到水平布局 */
hBoxLayout->addWidget(pushButton[0]);
hBoxLayout->addWidget(pushButton[1]);

/* 将水平布局设置为 hWidget 的布局 */
hWidget->setLayout(hBoxLayout);

/* 将文本浏览框和 hWidget 添加到垂直布局 */
vBoxLayout->addWidget(textBrowser);
vBoxLayout->addWidget(hWidget);

/* 将垂直布局设置为 vWidget 的布局 */
vWidget->setLayout(vBoxLayout);

/* 设置 vWidget 为中心部件 */
setCentralWidget(vWidget);

/* 定时器初始化 */
timer = new QTimer();

/* 信号槽连接 */
connect(pushButton[0], SIGNAL(clicked()),
this, SLOT(timerStart()));
connect(pushButton[1], SIGNAL(clicked()),
this, SLOT(clearHostInfo()));
connect(timer, SIGNAL(timeout()),
this, SLOT(timerTimeOut()));
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::timerStart()
{
/* 清空文本 */
textBrowser->clear();

/* 定时 1s */
timer->start(1000);
}

void MainWindow::timerTimeOut()
{
/* 显示本机信息 */
showHostInfo();

/* 停止定时器 */
timer->stop();
}

QString MainWindow::getHostInfo()
{
/* 通过 QHostInfo 的 localHostName 函数获取主机名称 */
QString str = "主机名称:" + QHostInfo::localHostName() + "\n";
/* 获取所有的网络接口,
* QNetworkInterface 类提供主机的 IP 地址和网络接口的列表 */
QList<QNetworkInterface> list
= QNetworkInterface::allInterfaces();

/* 遍历 list */
foreach (QNetworkInterface interface, list) {
str+= "网卡设备:" + interface.name() + "\n";
str+= "MAC 地址:" + interface.hardwareAddress() + "\n";

/* QNetworkAddressEntry 类存储 IP 地址子网掩码和广播地址 */
QList<QNetworkAddressEntry> entryList
= interface.addressEntries();

/* 遍历 entryList */
foreach (QNetworkAddressEntry entry, entryList) {
/* 过滤 IPv6 地址,只留下 IPv4 */
if (entry.ip().protocol() ==
QAbstractSocket::IPv4Protocol) {
str+= "IP 地址:" + entry.ip().toString() + "\n";
str+= "子网掩码:" + entry.netmask().toString() + "\n";
str+= "广播地址:" + entry.broadcast().toString() + "\n\n";
}
}
}

/* 返回网络信息 */
return str;
}

void MainWindow::showHostInfo()
{
/* 获取本机信息后显示到 textBrowser */
textBrowser->insertPlainText(getHostInfo());
}

void MainWindow::clearHostInfo()
{
/* 判断 textBrowser 是否为空,如果不为空则清空文本 */
if (!textBrowser->toPlainText().isEmpty())

/* 清空文本 */
textBrowser->clear();
}

效果

网络编程——获取本机网络信息_子网掩码

主要是给自己看的,所以肯定会出现很多错误哈哈哈哈哈