Qt QWebView缓存

Qt QWebView缓存,qt,qtwebkit,qwebview,Qt,Qtwebkit,Qwebview,我正在Qt5.2中编写一个简单的WebView应用程序。我正在使用的网站有点重,因此我需要缓存它。但问题是,当单击页面并访问子页面时,我会出现QIODevice::read:devicenotopen错误。最后,我得到了一张空白的白纸。我哪里出错了 代码如下: WebsiteWidget::WebsiteWidget(QWidget *parent) : QWidget(parent) { m_url = QUrl("http://www.google.com/"); Q

我正在Qt5.2中编写一个简单的WebView应用程序。我正在使用的网站有点重,因此我需要缓存它。但问题是,当单击页面并访问子页面时,我会出现
QIODevice::read:devicenotopen
错误。最后,我得到了一张空白的白纸。我哪里出错了

代码如下:

WebsiteWidget::WebsiteWidget(QWidget *parent) :
    QWidget(parent)
{
    m_url = QUrl("http://www.google.com/");
    QWebSettings::globalSettings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);
    QWebSettings::globalSettings()->setAttribute(QWebSettings::LocalStorageEnabled, true);
    QWebSettings::globalSettings()->setAttribute(QWebSettings::JavascriptEnabled, true);
    QWebSettings::globalSettings()->setAttribute(QWebSettings::PluginsEnabled, true);

    m_websiteContentLayout = new QHBoxLayout();
    m_webView = new QWebView(this);

    QNetworkAccessManager* manager = new QNetworkAccessManager(this);
    QNetworkDiskCache* diskCache = new QNetworkDiskCache(this);

    QString location = QStandardPaths::writableLocation(QStandardPaths::CacheLocation);
    diskCache->setCacheDirectory(location);
    manager->setCache(diskCache);
    m_webView->page()->setNetworkAccessManager(manager);
    m_webView->page()->settings()->setMaximumPagesInCache(10);

    QNetworkRequest request = QNetworkRequest();
    request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache);
    request.setUrl(m_url);

    connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
    manager->get(request);

    m_websiteContentLayout->addWidget(m_webView);
    m_websiteContentLayout->setContentsMargins(0, 0, 0, 0);
    this->setLayout(m_websiteContentLayout);
}

void WebsiteWidget::replyFinished(QNetworkReply* reply)
{
    QByteArray data=reply->readAll();
    QString str(data);
    if(reply->url() == m_url)
    {
        m_webView->setHtml(str, reply->url());
    }
}

对我来说,重定向(比如www.xbox.com给你xbox.com:80/en-US/)给了我一个0字节长的响应,只是一个头,这是一个问题。我也需要处理这个问题。

在我做了以下操作之后,我的脱机存储工作正常:

webView->settings()->setAttribute(QWebSettings::LocalStorageEnabled,true); webView->settings()->enablePersistentStorage(QDir::homePath())

其他设置(setOfflineStorageDefaultQuota e.t.c.)似乎是可选的。
(可能需要将homePath更改为更好的方式,如tmpPath等)

我遇到了相同的症状,但我不使用缓存。对我来说,本地html文件的路径是错误的。希望它能帮助你。