首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QWebView缓存

QWebView缓存
EN

Stack Overflow用户
提问于 2013-12-16 16:42:15
回答 2查看 3.2K关注 0票数 3

我正在用QT5.2编写一个简单的WebView应用程序。我使用的网站有点重,所以我需要缓存它。但问题是,当我点击一个页面并访问子页面时,我会得到QIODevice::read: device not open错误。最后,我得到了一个空白的,白色的页面。我哪里出错了?

下面是代码:

代码语言:javascript
复制
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());
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-21 14:40:40

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

票数 -1
EN

Stack Overflow用户

发布于 2014-07-01 07:36:02

在我做完之后,我的离线存储就开始工作了:

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

其他设置(setOfflineStorageDefaultQuota e.t.c.)似乎是可选的。(人们可能希望将homePath改为更好的东西,如tmpPath等)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20616064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档