Qt網路編程之QNetworkAccessManager

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.