注意:這個類的所有函數都是可重入的。
這個類是從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 )
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。