QT网络编程——API初识

该文介绍如何使用QT的QHostInfo和QNetworkInterface类来获取本地主机的IP地址、网卡设备名、MAC地址、子掩码和广播地址等网络接口信息,包括C++代码示例展示获取和显示这些信息的过程。
摘要由CSDN通过智能技术生成

网络编程

1.获取本地IP

1.1 API说明

​ 获取本地IP通过QT提供的两个类QHostInfo 和QNetworkInterface 获取本地网络所有接口的信息,包含Host设备名称、网卡设备、MAC地址、IP地址、子掩码以及广播地址等。

QHostInfo:该类提供一些静态函数实现主机名称查找。

查询assistant助手得知:

QString QHostInfo::localHostName()可获取本地主机名;

QNetworkInterface:该类提供一系列Host设备IP地址以及网络接口信息

查询帮助文档可得知以下信息,通过 QNetworkInterface以及addressEntries两个队列存储当前HOST设备下所有网络接口信息:

QList<QNetworkInterface> QNetworkInterface::allInterfaces()队列中存储主机设备所有网络接口,通过以下两个子类函数获取相关信息:

​ QString name()返回网卡设备;

​ QString hardwareAddress() 返回对应网卡设备MAC地址

QList addressEntries() 队列中存储IP地址,子掩码、广播地址等信息,通过以下几个子函数实现访问:

​ QHostAddress ip() 返回IP地址;

​ QHostAddress broadcast() 返回广播地址;

​ QHostAddress netmask() 返回子掩码。

1.2 设计思路

​ 通过第一小节我们已经得知了获取本地主机设备所有网络接口的函数,通过以上所有方法可以获得例如HostName、ip、name、hardwareAddress、

boardcast、netmask等常见网络接口信息。具体C++实现如下:

/******   .h头文件    ******/
/****** author:ndtf  ******/
/****** time:230222  ******/
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTextBrowser>
#include <QPushButton>
#include <QTimer>
#include <QHostInfo>
#include <QNetworkInterface>
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
private:
    QTextBrowser *textBrowser;
    QPushButton *pushButton[2];
    QTimer *timer;
    void layoutInit();
    QString getHostInfo();
private slots:
    void timerStart();
    void timerTimeout();
    void showHostInfo();
    void cleanHostInfo();
};
#endif // MAINWINDOW_H

/******   .cpp文件   ******/
/****** author:ndtf  ******/
/****** time:230222  ******/
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    layoutInit();
    timer = new QTimer();
    connect(pushButton[0],SIGNAL(clicked()),this,SLOT(timerStart()));
    connect(timer,SIGNAL(timeout()),this,SLOT(timerTimeout()));
    connect(pushButton[1],SIGNAL(clicked()),this,SLOT(cleanHostInfo()));
}

MainWindow::~MainWindow()
{
}
void MainWindow::layoutInit()
{
    this->setGeometry(0,0,800,600);
    pushButton[0] = new QPushButton(this);
    pushButton[1] = new QPushButton(this);
    pushButton[0]->setText("获取本机信息");
    pushButton[1]->setText("清除当前信息");
    pushButton[0]->setGeometry(600,200,150,50);
    pushButton[1]->setGeometry(600,400,150,50);
    textBrowser = new QTextBrowser(this);
    textBrowser->setGeometry(30,30,500,500);
}
void MainWindow::timerStart()
{
    textBrowser->clear();
    timer->start(10);
}
void MainWindow::timerTimeout()
{
    showHostInfo();
    timer->stop();
}
void MainWindow::showHostInfo()
{
    //textBrowser->setPlainText("hello");
    textBrowser->setPlainText(getHostInfo());

}
QString MainWindow::getHostInfo()
{
    QHostInfo hostinfo;
    QString str = "主机名称:"+hostinfo.localHostName()+"\n\n";

//    QHostAddress adress = hostinfo.addresses().first();
    QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();

    foreach(QNetworkInterface interface,list)
    {
        str += "网卡设备:" + interface.name() + "\n";
        str += "MAC地址:" + interface.hardwareAddress() + "\n";
        QList<QNetworkAddressEntry> entryList = interface.addressEntries();
        foreach(QNetworkAddressEntry entry,entryList)
        {
            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::cleanHostInfo()
{
    if(textBrowser->toPlainText().isEmpty())
    {
    }
    textBrowser->clear();
}

1.layoutInti() 实现布局初始化,创建了textBrowser控件作为信息输出窗口,并创建了两个pushButton按钮实现信息获取及清屏操作;

2.timerStart() 、timerTimeout() 通过计时器触发getHostInfo()功能函数实现;

3.getHostInfo() 50行获取当前Host设备名称,53行声明链表存储网络接口信息,由于当前设备下可能存在多个网络设备,因此55行通过foreach遍历该List,

​ 57~58行获取网卡设备名称及对应MCA地址。60行声明一个链表EntryLIst,遍历该list访问IP地址,子掩码,广播地址等信息;

4.cleanHostInfo() 实现清屏操作。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文档QT中文版本 内容详尽,下面是片段 信号 void activated ( int id ) 静态公有成员 QKeySequence shortcutKey ( const QString & str ) QString keyToString ( QKeySequence k ) (obsolete) QKeySequence stringToKey ( const QString & s ) (obsolete) 保护成员 virtual bool eventFilter ( QObject * o, QEvent * e ) -------------------------------------------------------------------------------- 详细描述 QAccel类用来处理键盘的加速键和快捷键。 键盘加速键是在某个组合键按下的时候出发一个动作,加速键可以处理窗口部件和它子部件里所有的键盘动作所以它不会被键盘焦点所影响。 在大多数情况下,你不需要直接使用这个类。使用QAction类建立的具有加速键的动作可以同时在菜单和工具栏里使用。如果你的兴趣只是在菜单里使用QMenuData::insertItem()或者QMenuData::setAccel()建立只作用在菜单里的加速键。那么许多窗口部件可以自动的生成加速键,比如QButton、QGroupBox、QLabel(使用QLabel::setBuddy())、QMenuBar和QTabBar。实例: QPushButton p( "&Exit", parent ); // 自动使用快捷键ALT+Key_E QPopupMenu *fileMenu = new fileMenu( parent ); fileMenu->insertItem( "Undo", parent, SLOT(undo()), CTRL+Key_Z ); QAccel包括一个加速键的列表,这个列表里的项目可以使用insertItem()、removeItem()、clear()、key()和findKey()。 每一个加速键项目是由一个标示符和 QKeySequence组成。一个单独的键组是由一个键盘码组合上改变符形成的(SHIFT,CTRL,ALT 或者 UNICODE_ACCEL)。例如,CTRL + Key_p可以作为文本打印的快捷键。这个键的键盘码在qnamespace.h里列出。还有,使用UNICODE_ACCEL可以使字符以统一码(unicode)的形式表现出来。例如 UNICODE_ACCEL + 'A' 所给出的加速键和Key_A是一样的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值