网络编程——获取本机网络信息
作者:互联网
代码
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();
}
效果
标签:pushButton,编程,网络,获取,textBrowser,void,new,include,MainWindow 来源: https://www.cnblogs.com/yoshinb/p/16342321.html