Qt网络编程之QNetworkAccessManager

来源:互联网 发布:男生衣服品牌知乎 编辑:程序博客网 时间:2024/05/22 05:05

       注意:这个类的所有函数都是可重入的。
       这个类是从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 )

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝账号登录密码忘记了怎么办 淘宝支付密码输错了怎么办 淘宝支付密码忘记了怎么办 淘宝货品上架后显示过期怎么办 被淘宝客监控了怎么办 助学贷款支付宝账号忘记怎么办 离婚支付宝的钱怎么办 扫码加载不出来怎么办 淘宝店铺被投诉售假怎么办 刚开的新店没人怎么办 淘宝访客量突然下降怎么办 支付宝账号封了怎么办 苹果x手机黑屏打不开怎么办 淘宝支付密码被锁定怎么办 淘宝支付密码锁定了怎么办 很抱歉手机淘宝停止运行怎么办 苹果手机桌面淘宝图标不见了怎么办 提示网页上有错误怎么办 淘宝定制家具违约两个月怎么办 同行在买家评价下面评论怎么办 淘宝知识产权侵权被投诉了怎么办 闲鱼买家说是假货退货怎么办 日验证失败次数上限怎么办 淘宝卖家发货不全怎么办 子账号登录不上怎么办 淘宝宝贝曝光量少怎么办 淘宝买东西退款卖家拒绝怎么办 华为手机淘宝不能收藏宝贝怎么办 包裹发出不想要了怎么办 淘宝改登录密码忘记了怎么办 三星s8应用闪退怎么办 淘宝购物商家不发货怎么办 淘宝商家迟迟不发货怎么办 买家地址写错了怎么办 买家写错快递地址怎么办 淘宝退款选择服务类型出不来怎么办 网购东西发错了怎么办 拒签商家不退款怎么办 红米手机无响应怎么办 淘宝网登录密码忘记了怎么办 淘宝网密码忘记了怎么办