注意:這個類的所有函數都是可重新進入的。
這個類是從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 )