• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

cynchanpin

  • 博客园
  • 联系
  • 订阅
  • 管理

View Post

QML 开发神奇加成之为网络资源设置本地缓存

QML 开发神奇加成之为网络资源设置本地缓存

直接上码:

#include <QNetworkAccessManager>
#include <QNetworkDiskCache>
#include <QStandardPaths>
#include <QQmlNetworkAccessManagerFactory>

class MyNetworkAccessManagerFactory : public QQmlNetworkAccessManagerFactory
{
public:
    virtual QNetworkAccessManager *create(QObject *parent);
};

QNetworkAccessManager *MyNetworkAccessManagerFactory::create(QObject *parent)
{
    QNetworkAccessManager *nam = new QNetworkAccessManager(parent);
    QNetworkDiskCache* diskCache = new QNetworkDiskCache(nam);

    QString cachePath = QStandardPaths::displayName(QStandardPaths::CacheLocation);

    qDebug() << "cache path:" << cachePath;

    diskCache->setCacheDirectory(cachePath);
    diskCache->setMaximumCacheSize(100 * 1024 * 1024);   // 这里设置的缓存大小为 100 MB

    nam->setCache(diskCache);

    return nam;
}

然后使用例如以下:

    engine.setNetworkAccessManagerFactory(new MyNetworkAccessManagerFactory);

然后一些网络图片,在载入前就会訪问本地是否有缓存,假设有,就直接拉取本地。

注意 XMLHttpRequest 的内部实现是拥有还有一个 NetworkAccessManager,所以这个工厂构建的 NetworkAccessManager 无法对 XMLHttpReuqest 产生作用。

此外。能够通过使用 QDir 以及 QFile 等文件操作来清空缓存。

此外提供一个能够统计目录大小的函数:

#include <QDir>

qint64 dirSize(const QString &path)
{
    QDir dir(path);
    qint64 size = 0;
    foreach (QFileInfo fileInfo, dir.entryInfoList(QDir::Files)) {
        size += fileInfo.size();
    }

    foreach (QString subDir, dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) {
        size += dirSize(path + QDir::separator() + subDir);
    }
    return size;
}

posted on 2017-07-19 17:43  cynchanpin  阅读(777)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3