QNetworkDiskCache Class

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

Header: #include <QNetworkDiskCache>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
继承: QAbstractNetworkCache

公共函数

QNetworkDiskCache(QObject *parent = nullptr)
virtual ~QNetworkDiskCache()
QString cacheDirectory() const
QNetworkCacheMetaData fileMetaData(const QString &fileName) const
qint64 maximumCacheSize() const
void setCacheDirectory(const QString &cacheDir)
void setMaximumCacheSize(qint64 size)

重新实现的公共函数

virtual qint64 cacheSize() const override
virtual QIODevice *data(const QUrl &url) override
virtual void insert(QIODevice *device) override
virtual QNetworkCacheMetaData metaData(const QUrl &url) override
virtual QIODevice *prepare(const QNetworkCacheMetaData &metaData) override
virtual bool remove(const QUrl &url) override
virtual void updateMetaData(const QNetworkCacheMetaData &metaData) override

公共插槽

virtual void clear() override

受保护功能

virtual qint64 expire()

详细说明

QNetworkDiskCache 使用QDataStream 将每个 url 存储在cacheDirectory 内的独立文件中。带有文本 MimeType 的文件使用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);

要检查响应是来自高速缓存还是网络,可以使用以下方法:

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

成员函数文档

[explicit] QNetworkDiskCache::QNetworkDiskCache(QObject *parent = nullptr)

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

[virtual noexcept] QNetworkDiskCache::~QNetworkDiskCache()

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

QString QNetworkDiskCache::cacheDirectory() const

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

另请参阅 setCacheDirectory()。

[override virtual] qint64 QNetworkDiskCache::cacheSize() const

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

[override virtual slot] void QNetworkDiskCache::clear()

重新实现:QAbstractNetworkCache::clear().

[override virtual] QIODevice *QNetworkDiskCache::data(const QUrl &url)

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

[virtual protected] qint64 QNetworkDiskCache::expire()

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

当缓存的当前大小大于maximumCacheSize() 时,将移除较旧的缓存文件,直到总大小小于maximumCacheSize() 的 90%,并使用文件创建日期来确定缓存文件的大小。

子类可以重新实现该函数,以改变缓存文件的移除顺序,同时考虑到QNetworkDiskCache 所不知道的应用程序信息,例如缓存被访问的次数。

注意: 如果当前缓存大小未知,调用cacheSize() 会过期。

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

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

返回缓存文件fileNameQNetworkCacheMetaData

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

[override virtual] void QNetworkDiskCache::insert(QIODevice *device)

重实现:QAbstractNetworkCache::insert(QIODevice *device).

qint64 QNetworkDiskCache::maximumCacheSize() const

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

另请参阅 setMaximumCacheSize().

[override virtual] QNetworkCacheMetaData QNetworkDiskCache::metaData(const QUrl &url)

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

[override virtual] QIODevice *QNetworkDiskCache::prepare(const QNetworkCacheMetaData &metaData)

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

[override virtual] 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() 。

[override virtual] void QNetworkDiskCache::updateMetaData(const QNetworkCacheMetaData &metaData)

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

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.