Qt网络编程之QNetworkAccessManager

翻译 2012年03月25日 02:14:23

       注意:这个类的所有函数都是可重入的。
       这个类是从Qt4.4引入的。

详细描述
      QNetworkAccessManager类允许应用程序发送网络请求和接收网络应答。
      Network Access API都是围绕着一个QNetworkAccessManager对象构造的,这个对象包含着发送请求的一些通用配置和设置。它包含着代理和缓存的配置,以及和这些事物相关的一些信号,并且应答信号可以作为我们检测一个网络操作的进度。
       一个QNetworkAccessManager对于一整个Qt应用程序来说已经足够了!
       一旦一个QNetworkAccessManager对象被创建了,那么应用程序就可以使用它在网络上发送请求。它提供了一组标准的函数,可以承载网络请求和一些可选的数据,并且每一个请求返回一个QNetworkReply对象。该返回的对象包含着返回的请求应带的所有数据。


    一个简单的从网络下载的例子可如下完成:
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
 connect(manager, SIGNAL(finished(QNetworkReply*)),
         this, SLOT(replyFinished(QNetworkReply*)));

 manager->get(QNetworkRequest(QUrl("http://qt.nokia.com")));
 
    QNetworkAccessManager有一个异步的API。当上面的replyFinished槽被调用的时候,它带的参数就是包含有下载的数据
的QNetworkReply对象。

注意:当请求完成的时候,程序员需要在适当的时候删除QNetworkReply对象。不要在连接到信号finished()的槽函数中直接
删除掉。你可以使用deleteLater()函数。

注意:QNetworkAccessManager将会把它受到的请求排队。并行执行的请求数量是依赖于协议的。目前,对于桌面平台的HTTP协议,对于一个主机/端口的组合,可6个请求并行执行。

 

一个更加复杂的例子,假设manager已经存在,代码如下:
QNetworkRequest request;
 request.setUrl(QUrl("
http://qt.nokia.com"));
 request.setRawHeader("User-Agent", "MyOwnBrowser 1.0");

 QNetworkReply *reply = manager->get(request);
 connect(reply, SIGNAL(readyRead()), this, SLOT(slotReadyRead()));
 connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),
         this, SLOT(slotError(QNetworkReply::NetworkError)));
 connect(reply, SIGNAL(sslErrors(QList<QSslError>)),
         this, SLOT(slotSslErrors(QList<QSslError>)));
  
网络和漫游支持
       在Qt4.7版本中,QNetworkAccessManager有了额外的Bearer ManagementAPI支持,使得QNetworkAccessManager具有了管理管理网络连接的能力。
      QNetworkAccessManager可以在设备离线的时候启用网络接口,并且如果当前进程是最后一个使用网络的时候,QNetworkAccessManager可以停止网络接口。漫游在传输上是同样透明的。每一个入队/挂起的网络请求可以自动的传输到一个新的接入点。
      客户希望不作出任何改变就可以利用这个特性。实际上他就像把与特定平台相关的网络连接的代码从应用程序中
删除。


成员类型文档
enum QNetworkAccessManager::NetworkAccessibility
表明是否可以通过网络管理接入网络
Constant                                                                      Value                            Description
QNetworkAccessManager::UnknownAccessibility         -1              The network accessibility cannot be determined.
QNetworkAccessManager::NotAccessible                      0              The network is not currently accessible, either because there is currently no network coverage or network access has been explicitly disabled by a call to setNetworkAccessible().
QNetworkAccessManager::Accessible                           1               The network is accessible.

 

enum QNetworkAccessManager::Operation
表明这个对于一个应答的处理过程
Constant                             Value Description
QNetworkAccessManager::HeadOperation   1     retrieve headers operation (created with head())
QNetworkAccessManager::GetOperation       2     retrieve headers and download contents (created with get())
QNetworkAccessManager::PutOperation       3     upload contents operation (created with put())
QNetworkAccessManager::PostOperation   4     send the contents of an HTML form for processing via HTTP POST (created with post())
QNetworkAccessManager::DeleteOperation   5     delete contents operation (created with deleteResource())
QNetworkAccessManager::CustomOperation   6     custom operation (created with sendCustomRequest())

 

属性文档
networkAccessible : NetworkAccessibility
这个属性表明当前是否可以通过网络管理接入网络。
    如果网络不可接入,那么network access manager将不会处理任何新的网络请求,所有这些请求都会发生错误而失败。
那些以file:// scheme作为URLs的请求仍然会被处理。
    这个属性的默认值反应了设备的物理状态。应用程序可以通过如下操作来覆盖它的值以禁止任何网络请求。
networkAccessManager->setNetworkAccessible(QNetworkAccessManager::NotAccessible);
    我们可以通过如下调用来再次使能网络:
networkAccessManager->setNetworkAccessible(QNetworkAccessManager::Accessible);

注意:调用setNetworkAccessible()并不会改变网络状态。

 

 

Access functions:
NetworkAccessibility networkAccessible () const
void setNetworkAccessible ( NetworkAccessibility accessible )

Notifier signal:
void networkAccessibleChanged ( QNetworkAccessManager::NetworkAccessibility accessible )

Qt: 网络编程实例,QNetworkAccessManager获取网页数据

Qt: 网络编程实例,QNetworkAccessManager获取网页数据
  • rl529014
  • rl529014
  • 2016年10月20日 23:52
  • 3910

Qt网络开发之QNetworkAccessManager使用要点

要点一:对于一个应用程序,一个QNetworkAccessManager就足够了,当然使用多个QNetworkAccessManager也是没有问题的,Webkit中一个QWebpage只会使用一个Q...
  • u010002704
  • u010002704
  • 2014年11月21日 18:55
  • 6117

QT利用QNetworkAccessManager下载文件

在这里利用QNetworkAccessManager来实现下载文件,经测试,可以使用http或者ftp都可以使用,别的还未测试 此处使用QT 4.8.6 首先记得在.pro文件加入networ...
  • prompty
  • prompty
  • 2016年12月19日 15:34
  • 1549

通过QT QNetworkAccessManager类实现HTTP下载文件的小工具

  • 2015年01月23日 17:33
  • 8KB
  • 下载

Qt之处理QNetworkAccessManager网络连接超时

简述在网络操作中,经常会由于各种原因引起网络连接超时,究竟何为网络连接超时? 网络连接超时:在程序默认的等待时间内没有得到服务器的响应 简述 超时原因 Qt 中的网络连接超时 如何处理超时 封装类...
  • u011012932
  • u011012932
  • 2016年11月17日 18:53
  • 8174

Qt通过QNetworkAccessManager实现Http网络通信

最近在搞Qt的网络通信和音乐播放的应用,做完每一个部分都会上传上来。下面的这段代码中实现了访问百度主页,返回的信息可以再输出窗查看,代码中注释的部分是上传文件用的。QNetworkAccessMana...
  • imxiangzi
  • imxiangzi
  • 2016年09月13日 13:22
  • 909

QNetworkAccessManager的异步与线程

Qt版本5.1.1 以HTTP操作为例 Qt中的HTTP操作都是异步的. 内部通过线程实现 创建线程的时机在QNetworkReplyHttpImplPrivate::postReq...
  • elibrace
  • elibrace
  • 2017年06月22日 11:01
  • 516

程序员一枚】Qt网络开发之QNetworkAccessManager的使用

最近使用Qt实现一个C/S的应用,结构比较有意思,相信很多人做过C/S的应用,也已经有很多成熟的架构。但是我这个东西还是不一样的。     我们公司有成熟的服务器产品,基于B/S的,SOA结构,...
  • oMingZi12345678
  • oMingZi12345678
  • 2013年08月03日 00:31
  • 3174

QT5网络相关(QNetworkAccessManager)

QNetworkAccessManager类允许应用程序发送网络请求和接收网络应答。 本文简单介绍QT5中访问网站获取网页源码以及下载URL链接文件以及如何设置代理ip...
  • CSDN_SXL
  • CSDN_SXL
  • 2016年01月26日 14:43
  • 6159

Qt之高级网络操作(HTTP/FTP快速上手)

简述Qt Network 模块中提供了一些高级别的类,例如:QNetworkRequest、QNetworkReply 和 QNetworkAccessManager,使用常见的协议执行网络操作。简述...
  • u011012932
  • u011012932
  • 2016年09月14日 17:03
  • 8185
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt网络编程之QNetworkAccessManager
举报原因:
原因补充:

(最多只允许输入30个字)