Qt网络:网络大管家

您所在的位置:网站首页 accessible用法 Qt网络:网络大管家

Qt网络:网络大管家

2024-05-28 15:04| 来源: 网络整理| 查看: 265

之所以说QNetworkAccessManager类是网络大管家,是因为所有和网络相关的接口都是围绕QNetworkAccessManager创造出来的对象转悠,并且一个应用程序只要有一个QNetworkAccessManager对象即可该类控制着应用程序发送请求和接受回复。该类也承载着一切公共的配置以及所发请求的设置,还包含了代理配置、缓存配置、以及相对应的各种信号,reply(应答)信号可以用来监视网络活动。

网络上接受的所有reply都是QNetworkReply类对象,这个对象可以从中获取任何的数据。如下是一个简单的网络编程所需的构成,算是个模板吧:

QNetworkAccessManager *manager = new QNetworkAccessManager(this); connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*))); manager->get(QNetworkRequest(QUrl("http://qt-project.org")));

QNetworkAccessManager类有一个异步API。上述代码接受的QNetworkReply对象携带了下载的数据以及元数据(头文件等)。

注意:在一轮请求完成后,不要立即删除QNetworkReply对象,要用deleteLater()函数让Qt系统自己判断在适当的时候删除。

注意:QNetworkAccessManager类对所接收的请求会一个一个的排序,如果要并行处理这些请求,同时间内处理的数量取决于协议。目前,对HTTP协议是6个请求并行处理的

一个更加复杂的例子:

//创建个请求对象,设置好请求的内容 QNetworkRequest request; request.setUrl(QUrl("http://qt-project.org")); request.setRawHeader("User-Agent", "MyOwnBrowser 1.0"); //应答对象reply,不仅获得下载数据,还获得失败时的错误信息 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)), this, SLOT(slotSslErrors(QList)));

网络漫游支持(手机连接、WiFi管理等)

从Qt4.7开始增加了Bearer Management API的支持,QNetworkAccessManager类增加了管理网络连接的功能。如果设备离线,manager可以启动网络接口;如果当前进程是最后一个使用uplink(交换机上常见的一种接口),则终止该网络接口。注意有些平台,虽然应用程序不再使用uplink接口,但也会延长其生命周期,直到整个操作系统结束才会终结。

漫游功能也是完全透明可见的,任何列队/挂起的网络请求都会自动的转到新的接入点。需要使用此功能的client(客户端)不需要进行任何改变,事实上有些平台可能会删除该功能的代码,反正也不影响正常运行。

注意:QNetworkAccessManager类的网络漫游功能需要平台支持,那么如何知道平台是否支持呢?使用QNetworkConfigurationManager::NetworkSessionRequird()函数来检测。

两个枚举enum Q


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3