QNetworkDiskCache 类
QNetworkDiskCache 类提供了一个非常基础的磁盘缓存。 更多...
头文件 | #include <QNetworkDiskCache> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
qmake | QT += network |
继承 | QAbstractNetworkCache |
公共函数
QNetworkDiskCache(QObject *parent = nullptr) | |
虚拟 | ~QNetworkDiskCache() |
QString | cacheDirectory() const |
QNetworkCacheMetaData | fileMetaData(const QString &fileName) const |
qint64 | maximumCacheSize() const |
void | setCacheDirectory(const QString &cacheDir) |
void | setMaximumCacheSize(qint64 size) |
重写公共函数
虚拟 qint64 | cacheSize() const override |
虚拟 QIODevice * | data(const QUrl &url) override |
虚拟 void | insert(QIODevice *device) override |
虚拟 QNetworkCacheMetaData | metaData(const QUrl &url) override |
虚拟 QIODevice * | prepare(const QNetworkCacheMetaData &metaData) override |
虚拟 bool | remove(const QUrl &url) override |
虚拟 void | updateMetaData(const QNetworkCacheMetaData &metaData) override |
公共槽函数
虚拟 void | clear() override |
保护函数
虚拟 qint64 | expire() |
详细说明
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 不知的信息时改变缓存文件删除的顺序,例如,缓存被访问的次数。
另请参阅maximumCacheSize () 和 fileMetaData ()。
QNetworkCacheMetaData QNetworkDiskCache::fileMetaData(const QString &fileName) const
返回缓存文件 fileName 的 QNetworkCacheMetaData。
如果 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公司商标。所有其他商标均为其各自所有者的财产。