On this page

QNetworkDiskCache Class

The QNetworkDiskCache class provides a very basic disk cache. More...

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

Public Functions

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)

Reimplemented Public Functions

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

Public Slots

virtual void clear() override

Protected Functions

virtual qint64 expire()

Detailed Description

QNetworkDiskCache stores each url in its own file inside of the cacheDirectory using QDataStream. Files with a text MimeType are compressed using qCompress. Data is written to disk only in insert() and updateMetaData().

Currently you cannot share the same cache files with more than one disk cache.

QNetworkDiskCache by default limits the amount of space that the cache will use on the system to 50MB.

Note you have to set the cache directory before it will work.

A network disk cache can be enabled by:

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

When sending requests, to control the preference of when to use the cache and when to use the network, consider the following:

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);

To check whether the response came from the cache or from the network, the following can be applied:

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

Security Considerations

QNetworkDiskCache stores HTTP response bodies and metadata, including response headers, to disk without encryption. The compression applied to text content is for storage efficiency only and does not provide confidentiality protection.

Which responses are cached is primarily determined by the HTTP cache control headers sent by the server. Well-configured servers typically prevent caching of responses containing sensitive data from authenticated sessions. However, the application cannot rely on every server doing so correctly, and what the server considers non-sensitive may not match the application's own requirements.

For cases where the server's caching policy is not sufficient:

Cache entries carry basic structural validation but may become invalid due to disk corruption, unclean application shutdown, or other causes. Applications should not treat cached data as trustworthy without independent validation.

Member Function Documentation

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

Creates a new disk cache. The parent argument is passed to QAbstractNetworkCache's constructor.

[virtual noexcept] QNetworkDiskCache::~QNetworkDiskCache()

Destroys the cache object. This does not clear the disk cache.

QString QNetworkDiskCache::cacheDirectory() const

Returns the location where cached files will be stored.

See also setCacheDirectory().

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

Reimplements: QAbstractNetworkCache::cacheSize() const.

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

Reimplements: QAbstractNetworkCache::clear().

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

Reimplements: QAbstractNetworkCache::data(const QUrl &url).

[virtual protected] qint64 QNetworkDiskCache::expire()

Cleans the cache so that its size is under the maximum cache size. Returns the current size of the cache.

When the current size of the cache is greater than the maximumCacheSize() older cache files are removed until the total size is less then 90% of maximumCacheSize() starting with the oldest ones first using the file creation date to determine how old a cache file is.

Subclasses can reimplement this function to change the order that cache files are removed taking into account information in the application knows about that QNetworkDiskCache does not, for example the number of times a cache is accessed.

Note: cacheSize() calls expire if the current cache size is unknown.

See also maximumCacheSize() and fileMetaData().

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

Returns the QNetworkCacheMetaData for the cache file fileName.

If fileName is not a cache file QNetworkCacheMetaData will be invalid.

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

Reimplements: QAbstractNetworkCache::insert(QIODevice *device).

qint64 QNetworkDiskCache::maximumCacheSize() const

Returns the current maximum size for the disk cache.

See also setMaximumCacheSize().

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

Reimplements: QAbstractNetworkCache::metaData(const QUrl &url).

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

Reimplements: QAbstractNetworkCache::prepare(const QNetworkCacheMetaData &metaData).

[override virtual] bool QNetworkDiskCache::remove(const QUrl &url)

Reimplements: QAbstractNetworkCache::remove(const QUrl &url).

void QNetworkDiskCache::setCacheDirectory(const QString &cacheDir)

Sets the directory where cached files will be stored to cacheDir

QNetworkDiskCache will create this directory if it does not exists.

Prepared cache items will be stored in the new cache directory when they are inserted.

See also cacheDirectory() and QStandardPaths::CacheLocation.

void QNetworkDiskCache::setMaximumCacheSize(qint64 size)

Sets the maximum size of the disk cache to be size.

If the new size is smaller then the current cache size then the cache will call expire().

See also maximumCacheSize().

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

Reimplements: QAbstractNetworkCache::updateMetaData(const QNetworkCacheMetaData &metaData).

© 2026 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.