首页 > 编程语言 >Qt网络编程知识体系

Qt网络编程知识体系

时间:2024-12-14 22:32:35浏览次数:11  
标签:知识 Qt QHostInfo void 编程 ui QString Dialog GetHostNameIPInfo

Qt网络编程基础

Qt直接提供网络编程模块,基于TCP/IP客户端和服务器相关各种类。TCP通信(QTcpSocket/QTcpServer)。UDP通信(QUdpSocket)。还有部分实现HTTP、FTP等网络协议的高级类。如QNetworkRequest/QNetworkAccessManager等。

我们开发过程中,UDP、TCP、HTTP 通信类等,必须在程序中引用 Qt 网络模块,项目配置文件的一条配置语句:QT +=network

QHostInfol类:QHostInfo类为主机名查找提供静态函数,主要用来查询主机信息、包括主机名、ip地址、DNS域名等信息。

QNetworkInterface类,主要用于获取主机所有IP地址和网络接口列表信息。

实例程序

#include "gethostnameipinfo.h"
#include "ui_gethostnameipinfo.h"

#include <QMessageBox>

GetHostNameIPInfo::GetHostNameIPInfo(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::GetHostNameIPInfo)
{
    ui->setupUi(this);

}

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

void GetHostNameIPInfo::getHostNameIP()
{
    // 获取主机名称
    QString StrLocalHostName = QHostInfo::localHostName();
    ui->lineEditHostName->setText(StrLocalHostName);

    // 根据主机名称获取对应的IP地址
    QString StrLocalIpAddress;
    QHostInfo hostinfo = QHostInfo::fromName(StrLocalHostName);
    QList<QHostAddress> ipaddresslist = hostinfo.addresses();

    if(!ipaddresslist.isEmpty()){
        for(int i=0;i<ipaddresslist.size();i++){
            QHostAddress addresshost = ipaddresslist.at(i);
            if(QAbstractSocket::IPv4Protocol == addresshost.protocol()){
                StrLocalIpAddress = addresshost.toString();
                break;
            }
        }
    }
    ui->lineEditIPAddr->setText(StrLocalIpAddress);

}

void GetHostNameIPInfo::on_GetHostNameIP_btn_clicked()
{
    getHostNameIP();
}


void GetHostNameIPInfo::on_GetHostInfo_btn_clicked()
{
    QString strTemp = "";
    QList<QNetworkInterface> netlist = QNetworkInterface::allInterfaces();
    for(int i=0;i<netlist.size();i++){
        QNetworkInterface interface = netlist.at(i);
        strTemp = strTemp + QString::fromLocal8Bit("设备名称:") + interface.name() + "\n";
        strTemp = strTemp + QString::fromLocal8Bit("硬件地址:") + interface.hardwareAddress() + "\n";

        QList<QNetworkAddressEntry> entrylist = interface.addressEntries();
        for(int j=0;j<entrylist.size();j++){
            QNetworkAddressEntry entry = entrylist.at(j);
            strTemp = strTemp + QString::fromLocal8Bit("\tip地址:") + entry.ip().toString() + "\n";
            strTemp = strTemp + QString::fromLocal8Bit("\t子网掩码:") + entry.netmask().toString() + "\n";
            strTemp = strTemp + QString::fromLocal8Bit("\t广播地址:") + entry.broadcast().toString() + "\n";
        }
    }

    QMessageBox::information(this,QString::fromLocal8Bit("主机所有信息"),strTemp,QMessageBox::Ok);
}

 

#include "dialog.h"
#include "ui_dialog.h"


Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
{
    ui->setupUi(this);
}

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

QString Dialog::ProtocolTypeName(QAbstractSocket::NetworkLayerProtocol protocol)
{
    switch(protocol){
        case QAbstractSocket::IPv4Protocol:
            return "IPv4 Protocol";
        case QAbstractSocket::IPv6Protocol:
            return "IPv6 Protocol";
        case QAbstractSocket::AnyIPProtocol:
            return "Any IP Protocol";
        default:
            return "Unknown Network Layer Protocol";
    }
}

void Dialog::LookupHostInfoFunc(const QHostInfo &host)
{
    QList<QHostAddress> addresslist = host.addresses();
    for(int i=0;i<addresslist.size();i++){
        QHostAddress address = addresslist.at(i);
        ui->plainTextEdit_DomainIP->append(QString::fromLocal8Bit("协议类型:")+ProtocolTypeName(address.protocol()));
        ui->plainTextEdit_DomainIP->append(QString::fromLocal8Bit("本地IP地址:")+address.toString());
    }
}

void Dialog::on_ClearData_clicked()
{
    ui->plainTextEdit_DomainIP->clear();
}


void Dialog::on_GetDomainIP_clicked()
{
    QString strhostname = ui->lineEdit_InputUrl->text();
    ui->plainTextEdit_DomainIP->append(QString::fromLocal8Bit("你所查询主机信息:")+strhostname);
    QHostInfo::lookupHost(strhostname,this,SLOT(LookupHostInfoFunc(QHostInfo)));
}

 

标签:知识,Qt,QHostInfo,void,编程,ui,QString,Dialog,GetHostNameIPInfo
From: https://blog.csdn.net/m0_59591650/article/details/144477492

相关文章

  • Qt从入门到入土(六)-实现炫酷的登录注册界面(1)
    前言本文主要介绍了如何使用Qt从0开始实现一个登录注册界面。以及界面的布局设计和美化,通过本文可以学到很多Qt类和函数的使用。设置无边框窗口实现拖动效果代码this->setWindowFlags(Qt::FramelessWindowHint);//EventFilterObject是自己写的一个类installEventFilter......
  • 快速理解分布式事务Seate基本知识
    Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata将为用户提供了AT、TCC、SAGA和XA事务模式,为用户打造一站式的分布式解决方案。一.Seate的三大角色在Seata的架构中,一共有三个角色:1.TC(TransactionCoordinator)事务协调者或回滚......
  • QT 定义全局变量、通过函数初始化变量
    1.头文件中定义全局变量#ifndefZ3_GVARS_H#defineZ3_GVARS_H#include<QString> classZ3_GVARS{ public: staticQStringJSON_FILE_NAME; staticQStringSERVER_IP; staticintSERVER_PORT; staticvoidinitConfig();};#endif//!Z3_GVARS_H 2.在cpp......
  • Qt QHeaderView自绘实现表头双击编辑
    在使用QTreeWidget展示数据时,想要让表头可以编辑。但是QTreeWidget并没有提供这样的API。于是想到了,通过QHeaderView自绘去实现这样的需求。效果图:头文件://CustomHeader.h#pragmaonce#include<QHeaderView>#include<QLineEdit>#include<QHeaderView>#inclu......
  • python面向对象高级编程:使用元类
    在Python中,元类(Metaclass)是创建类的“类”。换句话说,元类是用来控制类的行为的。虽然元类在Python中不常用,但在某些高级编程场景中,它们可以提供强大的功能,如自动注册类、验证类定义、修改类属性等。1.导入必要的模块虽然元类不需要导入额外的模块,但你需要了解如何使用内置的......
  • python面向对象高级编程:使用枚举类
    在Python中,枚举类(Enum)是一种特殊的数据类型,它允许我们定义一组命名的常量。使用枚举类可以使代码更加清晰和易于维护,特别是在处理一组相关常量时。Python的enum模块提供了创建枚举类的功能。以下是如何在Python中使用枚举类的一些高级编程技巧:1.导入enum模块首先,我们需要导......
  • 【数字花园】数字花园:个人知识库网、第二大脑
    定义数字花园是通过借助网络数字工具,对想法、笔记和思考等一切你感兴趣的信息或进行收集、整理和创作,文字之间用标签或链接创建连接,形成一座独具个人浓厚色彩的信息与知识型花园。这个花园是开放的,不可避免地至少要经常打理。数字花园介于笔记本和博客之间的交叉空间,具有......
  • 三门峡知识付费系统服务热线
    关于三门峡地区的知识付费系统及教育服务,虽然直接与三门峡地区的本地资源相关的信息比较有限,我们可以提供一些更宽广的信息和资源链接以帮助相关从业人员更好地了解知识付费系统和服务相关的背景信息与技术细节。例如,如果您在寻求构建或选择一个适合自身需求的知识付费系统的指导,......
  • 大模型+知识图谱在工业领域落地的4大场景
    对于AI技术,大家热聊的话题超90%都是围绕大模型,而知识图谱则是上一波AI浪潮中比较热门的技术。今天特邀行业专家,探讨关于大模型和知识图谱在工业领域的一些落地实践。主要分为四个部分展开:大模型和知识图谱的关系、大模型+知识图谱双擎的原理、大模型+知识图谱双擎的......
  • springboot基于知识图谱与学习行为分析的在线学习平台开发
    目录功能和项目介绍系统实现截图开发核心技术介绍操作手册核心代码部分展示视频演示/源码获取功能和项目介绍jdk版本:jdk1.8+编程语言:java框架支持:springboot/ssm数据库:mysql版本不限数据库工具:Navicat/SQLyog都可以前端:vue.js+ElementUI开发工具:IDEA或......