【QT】QT网络编程简介

一、QT网络编程简介

QT自身有着完善的网络管理体系,既支持底层协议,也支撑上层封装。
本文介绍三个常用类和实践代码

1. 重要的类

  1. 管理类
    QNetworkAccessManager 网络接入管理类,使用该管理类可以方便管理网络请求等
  2. 请求类
    QNetworkRequest 请求类,用于发送网络请求
  3. 相应类
    QNetworkReply 相应类,用于处理相应信息

2. 网络体系

一个通用的网络体系大概步骤如下

  1. 通过管理类创建一个管理器
  2. 通过QUrl确认链接和其它请求信息
  3. 通过QNetworkRequest进行请求操作
  4. 通过管理类发送请求并关联接收
  5. 处理接收

3. 一个GET所需要的组件

  1. 通常一个GET请求需要QUrl进行构建请求链接
  2. 通过Request来封装请求
  3. 通过管理类发送请求
  4. 通过Reply处理相应

二、快速实践

案例一:创建一个GET请求

1. 在类内部定义网络编程所需的类

private:
    QNetworkAccessManager* manager;	
    QNetworkReply* reply;
private slots:
    void finishSlot(QNetworkReply*reply);

QNetworkAccessManager是管理类
QNetworkReply是相应类
finishSlot是接收相应的槽

2. new一个QNetworkAccessManager类

 MainWindow::manager = new QNetworkAccessManager(this);

3. 将Manager的finish信号和接受槽相关联

connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(finishSlot(QNetworkReply*)));

4. 编写接收槽函数

void MainWindow::finishSlot(QNetworkReply *reply)
{
    ui->strLab->setText("This is a text");
    QTextCodec *codec = QTextCodec::codecForName("utf8");
    QString all = codec->toUnicode(reply->readAll());
    ui->strLab->setText(all);
}

5. 发送请求

manager->get(QNetworkRequest(QUrl("http://localhost:8080/")));

6. 注销资源

reply->deleteLater();

不同于new运算符的是,QT使用了智能销毁的函数deleteLater,这个函数会自动判断合适的时机将资源销毁。
QT有着较为优秀的内存回收机制,当对象数量有对象树结构化的支持时,相关对象会按照对象树的规则自动销毁,避免了内存溢出的情况。
不过QT在内存管理方面需要编者着重注意内存问题,例如越界检查和野指针。

#:一个tip

当你的QT内存管理出现问题时往往会和当前系统其它使用QT编写的应用程序发生冲突,尤其是Windows平台下的一系列第三方服务。
经验来讲,野指针和内存越界的问题是引起蓝屏的主要根源。有时也会引起搜狗输入法的程序冲突。

#:GET函数封装流程

  1. const char* 封装为QUrl
  2. QUrl封装为QNetworkRequest
  3. QNetworkRequest作为get参数发送

案例二:中文编码问题

QTextCodec *codec = QTextCodec::codecForName("utf8");
QString all = codec->toUnicode(reply->readAll());

因为reply对象返回的是字节序,字节数组,是完全按照http返回的二进制数据
因此如果想要得到中文或者其他形式的编码,则需要进行二次编码
使用QTextCodec进行编码
编码结果得到的是QString

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本课程详细、全面地介绍了 Qt 开发中的各个技术细节,并且额外赠送在嵌入式端编写Qt程序的技巧。整个课程涵盖知识点非常多,知识模块囊括 Qt-Core 组件、QWidgets、多媒体、网络、绘图、数据库,超过200个 C++ 类的分析和使用,学完之后将拥有 Qt 图形界面开发的非常坚实的功底。 每个知识点不仅仅会通过视频讲解清楚,并且会配以精心安排的实验和作业,用来保证学习过程中切实掌握核心技术和概念,通过实验来巩固,通过实验来检验,实验与作业的目的是发现问题,发现技术盲点,通过答疑和沟通夯实技术技能。注意:本套视频教程来源于线下的实体班级,因此视频中有少量场景对话和学生问答,对此比较介意的亲们谨慎购买。注意:本套视频教程包含大量课堂源码,包含对应每个知识点的精心编排的作业。由于CSDN官方规定在课程介绍中不能出现作者的联系方式,因此在这里无法直接给出QQ答疑号,视频中的源码、资料和作业文档链接统一在购买后从CSDN平台跟我沟通,我会及时回复跟进。注意:本套视频教程包含全套10套作业题,覆盖所有视频知识点,循序渐进,各个击破,作业总纲如下:下面是部分作业题目展示,每道题都有知识点说明,是检验学习效果的一大利器:(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)…… ……
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值