• 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;
    }
  • 相关阅读:
    Java内存模型之重排序
    JAVA虚拟机:对象的创建过程
    单链表——基本操作
    new File()
    JVM回收方法区内存
    强软弱虚---强引用、软引用、弱引用、虚引用
    线性表(二)——链式存储
    JVM中判断对象是否存活的方法
    GC算法 垃圾收集器
    线性表(一)——顺序结构
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7207009.html
Copyright © 2020-2023  润新知