Установите QNetworkRequest всегда PreferCache - PullRequest
2 голосов
/ 03 февраля 2012

У меня есть QWebView, я создал QNetworkDiskCache и установил его.Теперь я хотел бы убедиться, что все QNetworkRequests всегда используют PreferCache вместо PreferNetwork.

Как мне настроить это?Кажется, не существует очевидного пути через

webView->page()->networkAccessManager()

Интересно, конечно, если мне даже нужно сделать это, то, чего я хочу добиться: у меня есть собственный браузер, он подключается кна специальном сайте в интрасети, я хотел бы, чтобы он почти постоянно кэшировал все изображения, css и js, отправленные сервером, если не указано иное.

Как мне это сделать?

1 Ответ

3 голосов
/ 04 февраля 2012

Вы можете получить класс 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);
}
...