QNetworkDiskCache 类

QNetworkDiskCache 类提供了一个非常基础的磁盘缓存。 更多...

头文件 #include <QNetworkDiskCache>
CMakefind_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmakeQT += network
继承 QAbstractNetworkCache

公共函数

QNetworkDiskCache(QObject *parent = nullptr)
虚拟~QNetworkDiskCache()
QStringcacheDirectory() const
QNetworkCacheMetaDatafileMetaData(const QString &fileName) const
qint64maximumCacheSize() const
voidsetCacheDirectory(const QString &cacheDir)
voidsetMaximumCacheSize(qint64 size)

重写公共函数

虚拟 qint64cacheSize() const override
虚拟 QIODevice *data(const QUrl &url) override
虚拟 voidinsert(QIODevice *device) override
虚拟 QNetworkCacheMetaDatametaData(const QUrl &url) override
虚拟 QIODevice *prepare(const QNetworkCacheMetaData &metaData) override
虚拟 boolremove(const QUrl &url) override
虚拟 voidupdateMetaData(const QNetworkCacheMetaData &metaData) override

公共槽函数

虚拟 voidclear() override

保护函数

虚拟 qint64expire()

详细说明

QNetworkDiskCache 将每个 URL 存储在其自己的 cacheDirectory 文件中,使用 QDataStream。具有文本 MIME 类型的文件使用 qCompress 进行压缩。数据仅在 insert() 和 updateMetaData() 中写入磁盘。

目前您无法将相同的缓存文件与多个磁盘缓存共享。

QNetworkDiskCache 默认将缓存占用的空间限制在系统中的 50MB。

注意,在它工作之前必须设置缓存目录。

可以通过以下方式启用网络磁盘缓存:

QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QNetworkDiskCache *diskCache = new QNetworkDiskCache(this);
QString directory = QStandardPaths::writableLocation(QStandardPaths::CacheLocation)
        + QLatin1StringView("/cacheDir/");
diskCache->setCacheDirectory(directory);
manager->setCache(diskCache);

发送请求时,要控制何时使用缓存和何时使用网络,请考虑以下因素

using namespace Qt::StringLiterals;
// do a normal request (preferred from network, as this is the default)
QNetworkRequest request(QUrl(u"http://qt-project.org"_s));
manager->get(request);

// do a request preferred from cache
QNetworkRequest request2(QUrl(u"http://qt-project.org"_s));
request2.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache);
manager->get(request2);

为了检查响应是从缓存还是从网络来的,可以应用以下方法

void replyFinished(QNetworkReply *reply) {
    QVariant fromCache = reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute);
    qDebug() << "page from cache?" << fromCache.toBool();
}

成员函数文档

[显式] QNetworkDiskCache::QNetworkDiskCache(QObject *parent = nullptr)

创建一个新的磁盘缓存。将parent参数传递给QAbstractNetworkCache 的构造函数。

[虚 noexcept] QNetworkDiskCache::~QNetworkDiskCache()

销毁缓存对象。这不会清除磁盘缓存。

QString QNetworkDiskCache::cacheDirectory() const

返回缓存文件将被存储的位置。

另请参阅setCacheDirectory

[覆盖 虚拟] qint64 QNetworkDiskCache::cacheSize() const

重实现了: QAbstractNetworkCache::cacheSize() const

[覆盖 虚拟槽] void QNetworkDiskCache::clear()

重实现了: QAbstractNetworkCache::clear

[覆盖 虚拟] QIODevice *QNetworkDiskCache::data(const QUrl &url)

重实现了: QAbstractNetworkCache::data(const QUrl &url)。

[虚受保护] qint64 QNetworkDiskCache::expire()

清理缓存以使其大小低于最大缓存大小。返回缓存的当前大小。

当前缓存大小超过 maximumCacheSize ()时,会删除较旧的缓存文件,直到总大小小于 maximumCacheSize () 的 90%,并从最早的文件开始删除,使用文件的创建日期来确定缓存文件的年龄。

子类可以重新实现此函数,以便在考虑应用知道但 QNetworkDiskCache 不知的信息时改变缓存文件删除的顺序,例如,缓存被访问的次数。

注意:cacheSize() 调用 expire 如果当前缓存大小未知。

另请参阅maximumCacheSize () 和 fileMetaData ()。

QNetworkCacheMetaData QNetworkDiskCache::fileMetaData(const QString &fileName) const

返回缓存文件 fileNameQNetworkCacheMetaData

如果 fileName 不是一个缓存文件,则 QNetworkCacheMetaData 将无效。

[覆盖 虚拟] void QNetworkDiskCache::insert(QIODevice *device)

重实现了: QAbstractNetworkCache::insert(QIODevice *device)。

qint64 QNetworkDiskCache::maximumCacheSize() const

返回磁盘缓存的当前最大大小。

另请参阅 setMaximumCacheSize()。

[重写虚拟] QNetworkCacheMetaData QNetworkDiskCache::metaData(const QUrl &url)

重实现了: QAbstractNetworkCache::metaData(const QUrl &url)

[重写虚拟] QIODevice *QNetworkDiskCache::prepare(const QNetworkCacheMetaData &metaData)

重实现了: QAbstractNetworkCache::prepare(const QNetworkCacheMetaData &metaData)

[重写虚拟] bool QNetworkDiskCache::remove(const QUrl &url)

重实现了: QAbstractNetworkCache::remove(const QUrl &url)

void QNetworkDiskCache::setCacheDirectory(const QString &cacheDir)

将缓存文件存储的目录设置为 cacheDir

QNetworkDiskCache 将在目录不存在时创建此目录。

在插入时,准备好的缓存项将存储在新缓存目录中。

另请参阅 cacheDirectory() 和 QStandardPaths::CacheLocation

void QNetworkDiskCache::setMaximumCacheSize(qint64 size)

将磁盘缓存的最高大小设置为 size

如果新大小小于当前缓存大小,则缓存将调用 expire()。

另请参阅 maximumCacheSize()。

[重写虚拟] void QNetworkDiskCache::updateMetaData(const QNetworkCacheMetaData &metaData)

重实现了: QAbstractNetworkCache::updateMetaData(const QNetworkCacheMetaData &metaData)

© 2024 Qt公司有限。本文档中的文档贡献是其各自所有者的版权。本提供的文档是在自由软件基金会发布的 GNU自由文档许可版1.3 的条款下许可的。Qt及其相关标志是芬兰及其它国家/地区的Qt公司商标。所有其他商标均为其各自所有者的财产。