内容简介:Qt网络之HTTP编程(1)
在 Qt网络编程 中,需要用到协议,即HTTP。它是超文本传输协议,它是一种文件传输协议。这一节中我们将讲解如何利用HTTP从网站上下载文件。使用的编程环境为Windows下基于Qt 4.6.3的Qt Creator 1.3.1
一、最简单的实现。
1.我们新建 Qt 4 Gui QApplication 。
工程名为“http”,然后选中QtNetwork模块,最后Base class选择QWidget 。注意:如果新建工程时没有添加 Qt Network模块,那么就要手动在工程文件.pro中添加代码
QT += network
表明我们使用了 网络 模块。
2.我们在widget.ui文件中添加一个 Text Browser ,如下图。
3..在widget.h中我们添加代码。
添加头文件:#include <QtNetwork>
私有变量private中:QNetworkAccessManager *manager;
私有槽函数private slots 中:void replyFinished(QNetworkReply *);
4.在widget.cpp文件中添加代码。
在构造函数中添加如下代码:
manager = new QNetworkAccessManager(this); //新建QNetworkAccessManager对象 connect(manager,SIGNAL(finished(QNetworkReply*)), //关联信号和槽 this,SLOT(replyFinished(QNetworkReply*))); manager->get(QNetworkRequest(QUrl(“http://www.yafeilinux.com”))); //发送请求
然后定义函数:
void Widget::replyFinished(QNetworkReply *reply) //当回复结束后 { QTextCodec *codec = QTextCodec::codecForName(“utf8″); //使用utf8编码,这样才可以显示中文 QString all = codec->toUnicode(reply->readAll()); ui->textBrowser->setText(all); reply->deleteLater(); //最后要释放reply对象 }
5.运行效果如下。
6.代码分析。
上面实现了最简单的应用HTTP协议下载网页的程序。QNetworkAccessManager类用于发送网络请求和接受回复,具体的,它是用QNetworkRequest 类来管理请求,QNetworkReply类进行接收回复,并对数据进行处理。
在上面的代码中,我们使用了下面的代码来发送请求:
manager->get(QNetworkRequest(QUrl(“http://www.yafeilinux.com”)));
它返回一个QNetworkReply对象,这个下面再讲。我们只需知道只要发送请求成功,它就会下载数据。而当数据下载完成后,manager会发出finished()信号,我们对它进行了关联:
connect(manager,SIGNAL(finished(QNetworkReply*)), this,SLOT(replyFinished(QNetworkReply*)));
也就是说,当下载数据结束时,就会执行replyFinished()函数。在这个函数中我们对接收的数据进行处理:
QTextCodec *codec = QTextCodec::codecForName(“utf8″); QString all = codec->toUnicode(reply->readAll()); ui->textBrowser->setText(all);
这里,为了能显示下载的网页中的中文,我们使用了QTextCodec 类对象,应用utf8编码。
使用reply->readAll()函数就可以将下载的所有数据读出。然后,我们在textBrowser中将数据显示出来。当reply对象已经完成了它的功能时,我们需要将它释放,就是最后一条代码:
reply->deleteLater();
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。