基于Qt的Http编程基本原理
来源:互联网 发布:淘宝天猫商城 编辑:程序博客网 时间:2024/05/15 00:05
基于Qt的Http编程基本原理
在Qt中,使用QNetworkAccessManager类就可以完成基于Http协议的数据上传和下载,该类既可以发送网络请求,也可以接收网络。而具体的网络请求是通过QNetworkRequest类发送的,具体的网络是通过QNetworkReply类来接收的。
本文将利用上面的几个类实现一个简单的Http客户端,从指定的网址下载数据。
基本原理
由于QNetworkAccessManager类中包含了一组标准的数据请求函数,因此可以通过该类的对象发送数据请求函数;每个请求函数执行完毕时都回返回一个QNetworkReply对象。当所有请求的数据都到达本地后,将引发一个finished()信号,该信号关联了一个处理返回数据的槽函数。具体的实现可参考下述代码:
01
Widget::Widget(QWidget *parent) :
02
QWidget(parent),
03
ui(
new
Ui::Widget)
04
{
05
ui->setupUi(
this
);
06
07
manager =
new
QNetworkAccessManager(
this
);
08
connect(manager, SIGNAL(finished(QNetworkReply *)),
09
this
, SLOT(replyFinished(QNetworkReply*)));
10
11
manager->get(QNetworkRequest(QUrl(
12
"http://www.kerneltravel.net/"
)));
13
}
可以看到,上述的基本原理大部分都在构造函数中完成。首先创建了一个QNetworkAccessManager对象manager;接着将manager所引发的finished()信号与replyFinished()槽进行关联;最后通过get()发送数据请求。
get()用于发送请求并获得目标地址中的数据,具体的数据请求则是通过创建一个QNetworkRequest类的对象而完成的。只要数据请求发送成功,则开始下载数据。当所有的数据下载完成后,就返回一个QNetworkReply类型的对象。同时manager对象将发送一个finished()信号,引发replyFinished槽函数的执行。
当执行上述的槽函数时,就说明目标地址的数据已经下载完毕。此时槽函数要做的就是将这些数据显示出来。这里我们只只对文本数据进行转换。对这些数据的转换动作可参考下述的代码:
1
void
Widget::replyFinished(QNetworkReply *reply)
2
{
3
QTextCodec *codec = QTextCodec::codecForName(
"utf8"
);
4
5
QString all = codec->toUnicode(reply->readAll());
6
ui->textEdit->setText(all);
7
reply->deleteLater();
8
}
为了能够正确显示中文,我们创建QTextCodec对象。利用readAll函数可以读取数据请求返回的所有数据,并且利用toUnicode函数将这些数据转换成QString类型。最后在用户界面中的文本编辑器中显示出来。
按照上面的方法就可以下载指定地址的数据。如下图:
当返回的数据显示完毕后,利用deleteLater函数将返回的数据删除。
上述的执行过程用数据流图表示如下:
上述内容只是对基于Http协议的数据下载做了简单的描述,并没有对界面设计作过多的介绍,关于界面的设计可见参考1。下文将对这个基本的Http客户端进行改造。
- 基于Qt的Http编程基本原理
- 基于Qt的Http编程-基本原理 GET方式
- 基于Qt的网络编程(Http)
- 基于Qt的sqlite编程
- HTTP断点续传的基本原理
- HTTP流程的基本原理
- HTTP断点续传的基本原理
- HTTP流程的基本原理
- HTTP断点续传的基本原理
- HTTP断点续传的基本原理
- HTTP的基本原理
- HTTP的基本原理
- HTTP断点续传的基本原理
- Qt:基于Qt开发的轻量级HTTP服务器
- 网络编程的基本原理
- QT基于TCP的Socket编程
- Qt 基础(一) Qt的基本原理
- HTTP 文件上传的基本原理
- poj 3187 Backward Digit Sums
- 任意输入一个数,打印对应的空心实心金字塔以及菱形
- css px转rem工具,支持生产整个css文件统一修改
- Java 继承和实例化
- Simple DirectMedia Layer----一套开源的跨平台多媒体开发库
- 基于Qt的Http编程基本原理
- Cardboard虚拟现实开发初步(三)
- 为React Native开发写的JS和React入门知识
- ZPL 打印条码、二维码及小票(中文/汉字),生成条码、二维码图片【Asp.Net】-含示例代码
- Struts2验证框架的配置及Validation.Xml常用的验证规则
- [POJ1236]Network of Schools(Tarjan缩点+强连通分量)
- 使用jbox做列表选择
- 用php和mysql开发招聘网站
- FrameBuffer