Qt网络编程--获取本机网络信息

1.界面布局

在这里插入图片描述

2.文件mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include<QPushButton>
#include<QTextBrowser>
#include<QHBoxLayout>
#include<QTimer>
#include<QDebug>
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容器
    QWidget *hwidget;
    QWidget *vwidget;

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

    //定时器
    QTimer *timer;

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

private slots:

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

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

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

    //清空textBrrowser信息
    void clearHostInfo();

};
#endif // MAINWINDOW_H
3.mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QHostInfo>
#include<QNetworkInterface>
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();
    //槽函数连接
    //1.获取本机信息按钮与启动定时器
    //获取本机信息
    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;
}

QString MainWindow::getHostInfo()
{
    QString str = "主机名称:"+QHostInfo::localHostName()+"\n";
    //2.获取所有网络接口
    // 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::timerTimeOut()
{
    //执行显示本机信息函数
    showHostInfo();
    timer->stop();
}

//显示本机信息
void MainWindow::showHostInfo()
{
    //将获取的文本内容 在显示框内显示
    textBrowser->insertPlainText(getHostInfo());

}

//启动定时器
void MainWindow::timerStart()
{
    //1.清空文本
    textBrowser->clear();
    //2.经过1000ms延迟后,启动定时器
    timer->start(1000);



}

//清空textBrrowser信息
void MainWindow::clearHostInfo()
{
    textBrowser->clear();
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt提供了QNetworkAccessManager类用于实现HTTP网络编程。通过QNetworkAccessManager,你可以发送HTTP请求并接收响应。 以下是一个简单的示例代码,演示了如何使用QNetworkAccessManager发送GET请求并接收响应: ```cpp #include <QtNetwork> int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); QNetworkAccessManager manager; QUrl url("http://www.example.com"); // 要发送请求的URL QNetworkRequest request(url); QNetworkReply* reply = manager.get(request); // 发送GET请求 QObject::connect(reply, &QNetworkReply::finished, [&]() { if (reply->error() == QNetworkReply::NoError) { QByteArray data = reply->readAll(); // 读取响应数据 qDebug() << data; } else { qDebug() << "Error: " << reply->errorString(); } app.quit(); }); return app.exec(); } ``` 在这个示例中,我们创建了一个QNetworkAccessManager对象,并通过QUrl设置要发送请求的URL。然后,我们使用QNetworkRequest将URL传递给QNetworkAccessManager的get()函数,以发送GET请求。通过连接QNetworkReply的finished信号,我们可以在请求完成后获取响应数据。 当请求完成时,我们检查QNetworkReply的error()函数以确定是否发生错误。如果没有错误发生,我们可以使用readAll()函数读取响应数据,并输出到控制台。否则,我们输出错误信息。 需要注意的是,由于网络请求是异步进行的,我们使用QCoreApplication的exec()函数来进入事件循环,以等待请求完成。在请求完成后,我们通过调用QCoreApplication的quit()函数来退出事件循环。 这只是一个简单的示例,你可以根据具体需求设置请求头、发送POST请求等。Qt的文档中有更详细的说明和示例代码,你可以参考官方文档来深入学习Qt网络编程

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值