2012-02-03 65 views
2

我有一個QWebView,我創建了一個QNetworkDiskCache並對其進行設置。現在我想確保所有QNetworkRequests始終使用PreferCache而不是PreferNetwork。將QNetworkRequest設置爲始終PreferCache

我該如何解決這個問題?似乎沒有要通過

webView->page()->networkAccessManager() 

一個明顯的方式我不知道,當然,如果我甚至要做到這一點,我要做到的是:我有一個自定義瀏覽器,它連接到一個特殊的內聯網網站,我希望它幾乎永久緩存服務器發送的所有圖像,css和js,除非另有說明。

我該如何做到這一點?

回答

3

你可以派生類QNetworkAccessManager並重新定義其虛函數createRequest這樣的:

QNetworkReply * MyNetworkManager::createRequest(
    QNetworkAccessManager::Operation operation, 
    const QNetworkRequest & originalRequest, 
    QIODevice * device) 
{ 
    QNetworkRequest request = originalRequest; 
    if(request.attribute(QNetworkRequest::CacheLoadControlAttribute) == 
     QNetworkRequest::PreferNetwork) 
    { 
     request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, 
      QNetworkRequest::PreferCache); 
    } 
    return QNetworkAccessManager::createRequest(operation, request, device); 
} 
相關問題