30-Qt网络(二)HTTP编程.pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《30-Qt网络(二)HTTP编程.pdf》由会员分享,可在线阅读,更多相关《30-Qt网络(二)HTTP编程.pdf(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、三十、三十、QtQt 网络(二)网络(二)HTTPHTTP 编程编程HTTP 即超文本传输协议,它是一种文件传输协议。这一节中我们将讲解如何利用 HTTP 从网站上下载文件。上一节中我们已经提到过了,现在 Qt 中使用QNetworkAccessManager 类和 QNetworkReply 类来进行 HTTP 的编程。下面我们先看一个简单的例子,然后再进行扩展。(一)最简单的实现。(一)最简单的实现。1.1.我们新建我们新建 Qt4Qt4 GuiGui QApplicationQApplication。工程名为“http”,然后选中 QtNetwork 模块,最后 Base class 选
2、择 QWidget。注意:如果新建工程时没有添加 QtNetwork 模块,那么就要手动在工程文件.pro中添加代码 QT+=network,表明我们使用了网络模块。2.2.我们在我们在 widget.uiwidget.ui 文件中添加一个文件中添加一个 TextText BrowserBrowser,如下图。,如下图。3.3.在在 widget.hwidget.h 中我们添加代码。中我们添加代码。添加头文件:#include 私有变量 private 中:QNetworkAccessManager*manager;私有槽函数 private slots 中:void replyFinishe
3、d(QNetworkReply*);4.4.在在 widget.cppwidget.cpp 文件中添加代码。文件中添加代码。在构造函数中添加如下代码:manager=new QNetworkAccessManager(this);/新建QNetworkAccessManager 对象connect(manager,SIGNAL(finished(QNetworkReply*),/关联信号和槽this,SLOT(replyFinished(QNetworkReply*);manager-get(QNetworkRequest(QUrl(“http:/”);/发送请求然后定义函数:void Wid
4、get:replyFinished(QNetworkReply*reply)/当回复结束后QTextCodec*codec=QTextCodec:codecForName(“utf8);/使用 utf8 编码,这样才可以显示中文QString all=codec-toUnicode(reply-readAll();ui-textBrowser-setText(all);reply-deleteLater();/最后要释放 reply 对象5.5.运行效果如下。运行效果如下。6.6.代码分析。代码分析。上面实现了最简单的应用 HTTP 协议下载网页的程序。QNetworkAccessManage
5、r类用于发送网络请求和接受回复,具体的,它是用 QNetworkRequest 类来管理请求,QNetworkReply 类进行接收回复,并对数据进行处理。在上面的代码中,我们使用了下面的代码来发送请求:manager-get(QNetworkRequest(QUrl(“http:/”);它返回一个 QNetworkReply 对象,这个下面再讲。我们只需知道只要发送请求成功,它就会下载数据。而当数据下载完成后,manager 会发出 finished()信号,我们对它进行了关联:connect(manager,SIGNAL(finished(QNetworkReply*),this,SLOT
6、(replyFinished(QNetworkReply*);也就是说,当下载数据结束时,就会执行 replyFinished()函数。在这个函数中我们对接收的数据进行处理:QTextCodec*codec=QTextCodec:codecForName(“utf8);QString all=codec-toUnicode(reply-readAll();ui-textBrowser-setText(all);这里,为了能显示下载的网页中的中文,我们使用了 QTextCodec 类对象,应用utf8 编码。使用 reply-readAll()函数就可以将下载的所有数据读出。然后,我们在text
7、Browser 中将数据显示出来。当 reply 对象已经完成了它的功能时,我们需要将它释放,就是最后一条代码:reply-deleteLater();(二)功能扩展(二)功能扩展通过上面的例子可以看到,Qt 中编写基于 HTTP 协议的程序是十分简单的,只有十几行代码。不过,一般我们下载文件都想要看到下载进度。下面我们就更改上面的程序,让它可以下载任意的文件,并且显示下载进度。1.1.我们更改我们更改 widget.uiwidget.ui 文件如下图。文件如下图。这里我们添加了一个 Line Edit,一个 Label,一个 Progress Bar 和一个 PushButton,它们的熟悉
8、保持默认即可。我们在 Push Button 上点击鼠标右键,选择 Go to slot,然后选择 clicked(),进入其单击事件槽函数,现在我们先不写代码。在写代码之前,我们先介绍一下整个程序执行的流程:在写代码之前,我们先介绍一下整个程序执行的流程:开始我们先让进度条隐藏。当我们在 Line Edit 中输入下载地址,点击下载按钮后,我们应用输入的下载地址,获得文件名,在磁盘上新建一个文件,用于保存下载的数据,然后进行链接,并显示进度条。在下载过程中,我们将每次获得的数据都写入文件中,并更新进度条,在接收完文件后,我们重新隐藏进度条,并做一些清理工作。根据这个思路,我们开始代码的编写。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 30 Qt 网络 HTTP 编程
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内